RabbitMQ有以下几种常用工作模式
1、Work queues
2、Publish/Subscribe
3、Routing
4、Topics
5、Header
6、RPC
work queues与入门程序相比,多了一个消费端,两个消费端共同消费同一个队列中的消息。
应用场景:对于人物过重或人物较多情况使用工作队列可以提高任务处理的速度。
测试:
1、使用helloworld入门程序,启动多个消费者。
2、生产者发送多个消息。
结果:
1、一条消息只会被一个消费者接收;
2、rabbit采用轮询的方式将消息是平均发送给消费者的;
3、消费者在处理完某条消息后,才会收到下一条消息。
发布订阅模式:
1、每个消费者监听自己的队列。
2、生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收到消息。
1、publish/subcribe与work queues有什么区别?
1)work queues不用定义交换机,而publish/scribe需要定义交换机。
2)publish/subcribe的生产方面向交换机发送消息,work queues的生产方是面向队列发送消息(底层使用默认交换机)。
3)publish/sucribe需要设置队列和交换机的绑定,work queues不需要设置,实质上work queues会将队列绑定到默认的交换机。
相同点:
所以两者实现的发布/订阅的效果是一样的,多个消费端监听同一个队列不会重复消费消息。
2.实质工作用什么 publish/subscribe还是work queues。
建议使用publish/subcribe,发布订阅模式比工作队列模式更强大,并且发布订阅模式可以指定自己专用的交换机。
路由模式:
1、每个消费者监听自己的队列,并且设置routingkey.
2、生产者将消息发给交换机,由交换机根据routingkey来转发消息到指定的队列。
Routing模式和Publish/subcribe模式的区别?
Routing模式要求队列在绑定交换机时要指定routingkey,消息会转发到符合routingkey的队列。
Topics模式:
1、一个交换机可以绑定多个队列,每个队列可以设置一个或多个带通配符的routingkey。
2、生产者将消息发给交换机,交换机根据routingkey的值来匹配队列,匹配时采用通配符方式,匹配成功的将消息转发到指定的队列。
Topics与Routing的区别?
Topics和Routing的基本原理相同,即:生产者将消息发给交换机,交换机根据routingKey将消息转发给与routingKey匹配的队列。
不同之处是:routingKey的匹配方式,Routing模式是相等匹配,topics模式是通配符匹配。
符号#:匹配一个或者多个词,比如inform.#可以匹配inform.sms、inform.email、inform.email.sms
符号*:只能匹配一个词,比如inform.*,可以匹配inform.sms,inform.email
header模式与routing不同的地方在于,header模式取消routingkey,使用header中的key/value(键值对)匹配队列。
RPC即客户端远程调用服务端的方法,使用MQ可以实现RPC的异步调用,基于Direct交换机实现,流程如下:
1、客户既是生产者又是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。
2、服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果
3、服务端将RPC方法的结果发送到RPC响应队列
4、客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果。
交换机的类型
* fanout: 对应的rabbitmq的工作模式是 publish/subscribe
* direct:对应Routing工作模式
* topic:对应Topics工作模式
* headers:对应Header工作模式