一,简单模式
生产者不经过交换机的路由,直接把消息放到队列里边去,消费者则监听消息队列,如果有消息,则直接消费掉,然后队列里的消息就会被自动删除。
注:这个模式有个问题,就是如果在消费者消费消息的时候出现问题了,那么这个时候消息已经被自动删除掉了,这就会造成消息的丢失。具体的解决方法,留到之后再介绍。
二, work工作模式(资源的竞争)
生产者把消息放入队列里,多个消费者同时监听着这个队列。如果队列里有消息,则多个消费者同时争夺消息,谁抢到那么就谁去处理这个消息。
注:在高并发的坏境下,可能会造成一条消息被重复消费。具体的解决方法,之后再做介绍。
三,发布订阅(共享资源)
x代表交换机,生产者把消息发送给交换机,然后交换机再把消息传递给与他绑定的队列,然后消费者根据自己的需求从队列里取出自己想要的消息。(也可以理解为交换机发布订阅,把消息发送到所有消息队列中,对应消息队列的消费者拿到消息进行消费)
四,路由模式
生产者把消息发送交换机,交换机则根据消息的路由键(一个字符串)来转发到与路由键相同的队列上,然后各自的消费者再从自己对应的队列里取出消息来消费。
五,主题模式(路由模式的一种)
与第四种方式类似,不过匹配的方式不再是路由键相同(字符串相同),而是一种类似与正则表达式的匹配。
注:路由键必须由 . 拼接多个单词组成,* 号代表一个单词,#号代表零个或多个单词
六,远程过程调用RPC
一个回调队列。客户端想客户端发起一次请求,同时发送一个回调队列地址reply_to,服务器端处理请求后,将其处理结果保存在一个存储体中。而客户端为了获得处理结果,就需要使用到这个回调队列地址。客户端的请求和回调队列地址都带着一个相同的correlation_id,把请求与它的返回结果关联起来。
具体流程分析:
- 当客户端启动的时候,它创建一个匿名独享的回调队列。
- 在 RPC 请求中,客户端发送带有两个属性的消息:一个是设置回调队列的 reply_to 属性,另一个是设置唯一值的 correlation_id 属性。
- 将请求发送到一个 rpc_queue 队列中。
- 服务器等待请求发送到这个队列中来。当请求出现的时候,它执行他的工作并且将带有执行结果的消息发送给 reply_to 字段指定的队列。
- 客户端等待回调队列里的数据。当有消息出现的时候,它会检查 correlation_id 属性。如果此属性的值与请求匹配,将它返回给应用