Simple
最简单常用的模式
graph LR P((P生产者)) -->Q[消息队列] Q --> C((C消费者)) style Q fill: #CCC, stroke-width:0
Work
一个消息只能被一个消费者获取
graph LR P((P生产者)) -->Q[消息队列] Q --> C1((C1消费者)) Q --> C2((C2消费者)) style Q fill: #CCC, stroke-width:0
Publish/Subscribe
- 消息被路由投递给多个队列,一个消息被多个消费者获取
graph LR P((P生产者)) --> X(X交换机) X --> Q1[消息队列1] X --> Q2[消息队列2] Q1 --> C1((C1消费者)) Q2 --> C2((C2消费者)) style Q1 fill: #CCC, stroke-width:0 style Q2 fill: #CCC, stroke-width:0
- 消息被路由投递给多个队列,一个消息被多个消费者获取
Routing
- 一个 消息被多个消费者获取。并且消息的目标队列可被生产者指定
graph LR P((P生产者)) --> X(X交换机
type=direct) X --error--> Q1[消息队列1] X --error--> Q2[消息队列2] X --info--> Q2[消息队列2] X --warning--> Q2[消息队列2] Q1 --> C1((C1消费者)) Q2 --> C2((C2消费者)) style Q1 fill: #CCC, stroke-width:0 style Q2 fill: #CCC, stroke-width:0
- 一个 消息被多个消费者获取。并且消息的目标队列可被生产者指定
Topic
一个消息被多个消费者获取。消息的目标queue可用BindingKey以通配符(#: 一个或多个词,*: 一个词)的方式指定
graph LR P((P生产者)) --> X(X交换机
type=topic) X --*.orange.*--> Q1[消息队列1] X --*.*.rabbit--> Q2[消息队列2] X --lazy.#--> Q2[消息队列2] Q1 --> C1((C1消费者)) Q2 --> C2((C2消费者)) style Q1 fill: #CCC, stroke-width:0 style Q2 fill: #CCC, stroke-width:0