目录
一、simple模式
simple模式实现-生产者
simple模式实现-消费者
二、work模式(能者多劳模式)
work模式实现-生产者
work模式实现-消费者
三、订阅模式-fanout
fanout模式实现-生产者
fanout模式实现-消费者
四、订阅模式-direct
direct模式实现-生产者
direct模式实现-消费者
五、订阅模式-topic
topic模式实现-生产者
topic模式实现-消费者
六、 订阅模式-headers
七、RPC
一、simple模式
- 即简单的点对点消息模型。开启mq服务,开启进程P 生产者向mq 写消息,进程C消费者监听mq,消费消息。
-
simple模式实现-生产者
-
simple模式实现-消费者
二、work模式(能者多劳模式)
- 一个生产者P,对应了多个消费者C。这些多个C,消费的消息各自不同,C1和C2 消费的消息,构成所有消息的一个全集。可开启C的消费竞争 channel.basicQos(1);C1和C2 能者多劳。
-
work模式实现-生产者
-
work模式实现-消费者
三、订阅模式-fanout
- 订阅模式中会用到交换机。根据交换机类型的不同,订阅模式的效果也会有所不同。
- 所有发送到该交换器的消息全部发送到其对应的队列中
-
fanout模式实现-生产者
-
fanout模式实现-消费者
四、订阅模式-direct
- 把消息路由到那些binding key和routing key一致的队列中
-
direct模式实现-生产者
-
direct模式实现-消费者
五、订阅模式-topic
- 与direct类型的Exchage相似,也是将消息路由到binding key与routing key相匹配的Queue中,但这里的匹配规则有些不同,它约定:
- routing key为一个句点号“. ”分隔的字符串(我们将被句点号“. ”分隔开的每一段独立的字符串称为一个单词),如“stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit”
- binding key与routing key一样也是句点号“. ”分隔的字符串
- binding key中可以存在两种特殊字符“*”与“#”,用于做模糊匹配,其中“*”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)
-
topic模式实现-生产者
-
topic模式实现-消费者
六、 订阅模式-headers
- 不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。 在绑定Queue与Exchange时指定一组键值对;当消息发送到Exchange时,RabbitMQ会取到该消息的headers(也是一个键值对的形式),对比其中的键值对是否完全匹配Queue与Exchange绑定时指定的键值对;如果完全匹配则消息会路由到该Queue,否则不会路由到该Queue。
七、RPC
- MQ本身是基于异步的消息处理,前面的示例中所有的生产者(P)将消息发送到RabbitMQ后不会知道消费者(C)处理成功或者失败(甚至连有没有消费者来处理这条消息都不知道)。 但实际的应用场景中,我们很可能需要一些同步处理,需要同步等待服务端将我的消息处理完成后再进行。