Spring Cloud(7):事件驱动(Stream)分布式缓存(Redis)及消息队列(Kafka)

时间:2023-03-08 15:54:35
Spring Cloud(7):事件驱动(Stream)分布式缓存(Redis)及消息队列(Kafka)

分布式缓存(Redis)及消息队列(Kafka)

设想一种情况,服务A频繁的调用服务B的数据,但是服务B的数据更新的并不频繁。

Spring Cloud(7):事件驱动(Stream)分布式缓存(Redis)及消息队列(Kafka)

实际上,这种情况并不少见,大多数情况,用户的操作更多的是查询。如果我们缓存读操作,这样就可以节省服务间调用及访问数据库的成本,从而极大的缩短服务A的请求时间,从而改善性能。

Spring Cloud(7):事件驱动(Stream)分布式缓存(Redis)及消息队列(Kafka)

我们发现,如果数据更新,服务B必须及时调用服务A,让服务A删除该数据的缓存。或者直接与缓存服务器,删除该数据的缓存。但是,无论使用哪种方式,都会使服务A和服务B紧密耦合。如果我们使用异步方式,使用消息在服务之间传递,可以有效改善这种缺点。
服务B每次更新数据后,就发布一条消息到消息队列,而服务A从消息队列获取消息,并删除该数据的缓存。服务B不需要知道消息发给谁,服务A也不需要知道消息从哪来。

Spring Cloud(7):事件驱动(Stream)分布式缓存(Redis)及消息队列(Kafka)

接下来几节会使用Spring Cloud Stream搭建一个如图所示的框架。

事件驱动架构(String Cloud Stream)

String Cloud可以轻松地将消息集成到基于Spring的微服务中,它是通过String Cloud Stream来实现的。String Cloud Stream是一个由注解驱动的框架,它允许开发者在String微服务架构中轻松地构建消息发布者和消费者。

String Cloud Stream中有4个组件涉及发布和接收消息:

发射器(source)

通道(channel)

绑定器(binder)

接收器(sink)

Spring Cloud(7):事件驱动(Stream)分布式缓存(Redis)及消息队列(Kafka)

Spring Cloud(7):事件驱动(Stream)分布式缓存(Redis)及消息队列(Kafka)