RabbitMQ工作模式介绍
RabbitMQ消息中间件针对不同的服务需求,提供了多种工作模式,下面,对RabbitMQ支持的工作模式和工作原理进行简要说明。
1.Work queues(工作队列模式)
参考RabbitMQ官方文档,Work queues工作模式的流程示意图如图1所示。
图1 Work queues工作模式
在Work queues工作模式中,不需要设置交换器(RabbitMQ会使用内部默认交换器进行消息转换),需要指定唯一的消息队列进行消息传递,并且可以有多个消息消费者。在这种模式下,多个消息消费者通过轮询的方式依次接收消息队列中存储的消息,一旦消息被某一个消费者接收,消息队列会将消息移除,而接收并处理消息的消费者必须在消费完一条消息后再准备接收下一条消息。
从上面的分析可以发现,Work queues工作模式适用于那些较为繁重,并且可以进行拆分处理的业务,这种情况下可以分派给多个消费者轮流处理业务。
2.Publish/Subscribe(发布订阅模式)
参考RabbitMQ官方文档,Publish/Subscribe工作模式的流程示意图如图2所示。
图2 Publish/Subscribe工作模式
在Publish/Subscribe工作模式中,必须先配置一个fanout类型的交换器,不需要指定对应的路由键(Routing key),同时会将消息路由到每一个消息队列上,然后每个消息队列都可以对相同的消息进行接收存储,进而由各自消息队列关联的消费者进行消费。
从上面的分析可以发现,Publish/Subscribe工作模式适用于进行相同业务功能处理的场合。例如,用户注册成功后,需要同时发送邮件通知和短信通知,那么邮件服务消费者和短信服务消费者需要共同消费“用户注册成功”这一条消息。
3.Routing**(路由模式)**
参考RabbitMQ官方文档,Routing工作模式的流程示意图如图3所示。
图3 Routing工作模式
在Routing工作模式中,必须先配置一个direct类型的交换器,并指定不同的路由键值(Routing key)将对应的消息从交换器路由到不同的消息队列进行存储,由消费者进行各自消费。
从上面的分析可以发现,Routing工作模式适用于进行不同类型消息分类处理的场合。例如,日志收集处理,用户可以配置不同的路由键值分别对不同级别的日志信息进行分类处理。
4.Topics(通配符模式)
参考RabbitMQ官方文档,Topics工作模式的流程示意图如图3所示。
图4 Topics工作模式
在Topics工作模式中,必须先配置一个topic类型的交换器,并指定不同的路由键值(Routing key)将对应的消息从交换器路由到不同的消息队列进行存储,然后由消费者进行各自消费。Topics模式与Routing模式的主要不同在于:Topics模式设置的路由键是包含通配符的,其中,#匹配多个字符,*匹配一个字符,然后与其他字符一起使用“.”进行连接,从而组成动态路由键,在发送消息时可以根据需求设置不同的路由键从而将消息路由到不同的消息队列。
从上面的分析可以发现,Topics工作模式适用于根据不同需求动态传递处理业务的场合。例如,一些订阅客户喜欢只接收邮件消息,一些订阅客户只喜欢接收短信消息,而有些订阅可以都接收,那么可以根据客户需求进行动态路由匹配,从而将订阅消息分发到不同的消息队列中。
5.RPC
参考RabbitMQ官方文档,RPC工作模式的流程示意图如图5所示。
图5 RPC工作模式
RPC工作模式与Work queues工作模式主体流程相似,都不需要设置交换器,需要指定唯一的消息队列进行消息传递。RPC模式与Work queues模式的主要不同在于:RPC模式是一个回环结构,主要针对分布式架构的消息传递业务,客户端Client先发送消息到消息队列,远程服务端Server获取消息,然后再写入另一个消息队列,向原始客户端Client响应消息处理结果。
从上面的分析可以发现,RPC工作模式适用于远程服务调用的业务处理场合。例如,在分布式架构中必须考虑的分布式事务管理问题。
6.Headers
Headers工作模式在RabbitMQ所支持的工作模式中是较为少用的一种模式,其主体流程与Routing工作模式有些相似。不过Headers工作模式在使用时,必须设置一个headers类型的交换器,而不需要设置路由键,取而代之的是在Properties属性配置中的headers头信息中使用key/value的形式配置路由规则。由于Headers工作模式使用较少,官方文档也没有详细说明,这里不做具体说明了。
上面主要针对RabbitMQ支持的6种工作模式及原理进行了说明,其中有些工作模式还可以嵌套使用,例如,在发布订阅模式中加入工作队列模式。这里介绍的6种工作模式中,Publish/Subscribe、Routing、Topics和RPC模式在开发中是较为常用的几种工作模式。