rabbitmq工作流程及模式详解

springboot+rabbitmq

  • rabbitmq基本概念
    • 工作流程
    • 使用模式
    • 各种模式代码实现

rabbitmq基本概念

工作流程

rabbitmq工作流程及模式详解_第1张图片
这个看图就大概能明白了,简述一下就是:生产者将带有标识的消息发送给rabbbitmq,mq接收到消息,通过指定的标识找到队列,最后将消息放到队列里,消费者会监听(@RabbitListener)队列拿到对应的消息进行处理,当然,这里要说明一点,你可以直接使用队列,不用交换机,也就是常说的使用mq的简单模式,复杂情况就使用带交换机的模式,但最终队列才是消息最终的传递者。

使用模式

看了很多介绍工作模式的文章,总结之后感觉就两种:
单纯队列模式、交换机加队列模式、RPC模式。

  • 单纯队列模式
    直接利用队列来实现,不声明交换机,这个模式有细分两种小模式:简单模式(simple)、工作模式(work)。
    1、简单模式
    rabbitmq工作流程及模式详解_第2张图片
    生产者producer直接发送消息到队列,消费者监听队列拿到消息。
    2、工作模式
    rabbitmq工作流程及模式详解_第3张图片一个生产者,多个消费者,一个消息,只能被一个消费者获取,可以认为是simple模式的加强版,主要解决消息太多,消费者太少,用多个消费者来提高任务处理速度。
    提示:此种模式高并发下可能造成一个消息被多个队列重复消费,解决办法:加同步锁。
  • 交换机模式
    在队列前边加一个交换机,交换机又分四种类型:Fanout、headers、direct、topic。
    1、Fanout
    俗称广播模式,又叫发布/订阅模式
    rabbitmq工作流程及模式详解_第4张图片
    一个消息被多个队列监听,单纯队列模式自然无法满足,所以采用交换机模式。
    应用场景:邮件群发,群聊天,广播(广告)等。
    2、headers
    不常用,没研究过。
    3、direct
    定向模式,定向传递消息,可以说是routing路由模式的一种表现。
    rabbitmq工作流程及模式详解_第5张图片
    与广播模式的区别就是,它能够指定队列,这就意味着,我们在发送消息的时候必须要带上RoutingKey标识,然后交换机才能根据RoutingKey找到通过BingKey绑定的对应队列。
    3、topic
    又称为主题模式,也可以说是routing路由模式的另一种表现,与上边定向模式的区别就是,主题模式可以使用通配符来关联和绑定交换机和队列。
    rabbitmq工作流程及模式详解_第6张图片
    生产者P发送消息到交换机X,type=topic,交换机根据绑定队列的routing key的值进行通配符匹配;
    提示:Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: a.b和a.b.c
    通配符规则:
    “#” :匹配一个或多个词;
    “*”:匹配1个词;
    举个例子:a.*和a.#
    “#”可以匹配到a.b和a.b.c,而 * 只能匹配到a.b

通过java源码可以看到交换机的几种模式,第一个是自定义交换机rabbitmq工作流程及模式详解_第7张图片

  • RPC模式
    rabbitmq工作流程及模式详解_第8张图片
    RPC即客户端远程调用服务端的方法 ,使用MQ可以实现RPC的异步调用,基于Direct交换机实现,流程如下:
    1)客户端即是生产者也是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。
    2)服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果。
    3)服务端将RPC方法 的结果发送到RPC响应队列。
    4)客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果。

各种模式代码实现

下边针对上述常用的模式用springboot方式进行一一实现,由于篇幅过长,就分开查看,可根据需求跳转对应文章。
springboot整合rabbitmq-只队列模式
springboot整合rabbitmq-交换机模式

你可能感兴趣的:(中间件,rabbitmq,java,分布式)