- rabbitmq基本概念
- 工作流程
- 使用模式
- 各种模式代码实现
这个看图就大概能明白了,简述一下就是:生产者将带有标识的消息发送给rabbbitmq,mq接收到消息,通过指定的标识找到队列,最后将消息放到队列里,消费者会监听(@RabbitListener)队列拿到对应的消息进行处理,当然,这里要说明一点,你可以直接使用队列,不用交换机,也就是常说的使用mq的简单模式,复杂情况就使用带交换机的模式,但最终队列才是消息最终的传递者。
看了很多介绍工作模式的文章,总结之后感觉就两种:
单纯队列模式、交换机加队列模式、RPC模式。
- 单纯队列模式
直接利用队列来实现,不声明交换机,这个模式有细分两种小模式:简单模式(simple)、工作模式(work)。
1、简单模式
生产者producer直接发送消息到队列,消费者监听队列拿到消息。
2、工作模式
一个生产者,多个消费者,一个消息,只能被一个消费者获取,可以认为是simple模式的加强版,主要解决消息太多,消费者太少,用多个消费者来提高任务处理速度。
提示:此种模式高并发下可能造成一个消息被多个队列重复消费,解决办法:加同步锁。 - 交换机模式
在队列前边加一个交换机,交换机又分四种类型:Fanout、headers、direct、topic。
1、Fanout
俗称广播模式,又叫发布/订阅模式
一个消息被多个队列监听,单纯队列模式自然无法满足,所以采用交换机模式。
应用场景:邮件群发,群聊天,广播(广告)等。
2、headers
不常用,没研究过。
3、direct
定向模式,定向传递消息,可以说是routing路由模式的一种表现。
与广播模式的区别就是,它能够指定队列,这就意味着,我们在发送消息的时候必须要带上RoutingKey标识,然后交换机才能根据RoutingKey找到通过BingKey绑定的对应队列。
3、topic
又称为主题模式,也可以说是routing路由模式的另一种表现,与上边定向模式的区别就是,主题模式可以使用通配符来关联和绑定交换机和队列。
生产者P发送消息到交换机X,type=topic,交换机根据绑定队列的routing key的值进行通配符匹配;
提示:Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: a.b和a.b.c
通配符规则:
“#” :匹配一个或多个词;
“*”:匹配1个词;
举个例子:a.*和a.#
“#”可以匹配到a.b和a.b.c,而 * 只能匹配到a.b
通过java源码可以看到交换机的几种模式,第一个是自定义交换机
- RPC模式
RPC即客户端远程调用服务端的方法 ,使用MQ可以实现RPC的异步调用,基于Direct交换机实现,流程如下:
1)客户端即是生产者也是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。
2)服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果。
3)服务端将RPC方法 的结果发送到RPC响应队列。
4)客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果。
下边针对上述常用的模式用springboot方式进行一一实现,由于篇幅过长,就分开查看,可根据需求跳转对应文章。
springboot整合rabbitmq-只队列模式
springboot整合rabbitmq-交换机模式
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)