在微服务架构的系统中,我们通常会使用轻量级的消息代理来构建一个共用的消息主题让系统所有微服务实例都连接上来,由于该主题产生的消息会被所有实例监听和消费。 所以我们称它为消息总线。 由于消息总线在微服务架构中被广泛使用,所以它同配置中心一样,几乎是微服务架构中的必备组件。
01消息代理
消息代理是一种消息传输,路由验证的架构模式,它在应用程序之间通过通信调度,并最小化应用之间的依赖的作用。使得应用程序能够高效的解耦通信过程。
它的核心是消息的路由程序,用来实现接收和分发消息,并根据设定好的消息处理流来转发给正确的应用,它包含独立的通信和消息传递协议,能够通过组织内部和组织间的网络通信。
02 使用消息代理的场景
将消息路由到一个或多个目的地。消息转化为其它的表现方式。调用web服务来检索数据响应事件或错误。使用发布订阅方式来提供内容或基于主题的消息路由。执行消息的聚集,消息的分解,并将结果发送到它们的目的地,然后重新组合响应返回给消息用户。
目前很多开源版本可以使用,activeMQ,kafka,rabbitMq,rocketMq
rabbitMq以amqp协议实现,所以它可以支持多种操作系统,多种编程语言,几乎可以覆盖所有主流的技术平台,在微服务中间选型中,它是一个非常不错的选择。
整个过程大致如下:
客户端连接到消息队列服务器,打开一个channel。
客户端声名一个exchange,并设置相关属性。
客户端声名一个quene,并设置相关属性。
客户端使用rounting key 在exchange和quene之间建立绑定关系。
Exchange接收到消息后。根据消息的key和已经设置的binding,进行消费路由,将消息传递给一个或多个exchange。springboot整合rabbitmq比较简单。
Kafaka是使用scala实现的是基于消息发布-订阅模式实现的消息系统。涉及到一些基本概念。
Broker:kafka集群中包含一个或多个服务器,这些服务器称为broker。
Topic:每一个消息都是一个topic。
Partition;物理概念的分区。
Producer:消息生产者。
Consumer:消息消费者。
springboot在整合kafaka也挺容易的。相关搭建我们的渠道都很广,我就不做介绍了。
领取专属 10元无门槛券
私享最新 技术干货