一. Rabbitmq的工作模式
(一) Work queues工作队列模式
与简单模式不同,工作队列模式多了一个或者一些消费端,多个消费端共同消费同一个队列中的消息。这种模式常常应用于任务过多的情况,可以提高任务处理的速度。消费者之间对于同一个消息的关系是竞争的关系。
(二) Pub/Sub 订阅模式
1. 流程介绍
订阅模式中,多了交换机的转发过程。生产者将消息发送给交换机,交换机决定如何处理这些消息,如交给所有的队列,或交给特定的队列,或是丢弃这些消息,这些操作取决于 交换机的类型。队列得到这些消息后,消费者监听队列并得到消息。
2. 交换机类型
(1) Fanout
广播,将消息交给所有绑定到交换机的队列。
(2) Direct
定向,将消息交给符合指定Routing key的队列。
(3) Topic
通配符,将消息交给符合Routing pattern(路由模式)的队列。
注意,交换机没有存储能力,只负责转发消息,因此若没有队列和交换机绑定或没有符合路由规则的队列时,消息会丢失。
3. Fanout模式实例
(1) 创建生产者类
生产者类的流程与之前差不多,多了创建交换机,绑定队列和交换机的流程。
a) 创建交换机
创建交换机是使用通道的exchangeDeclare方法进行创建,exchangeDeclare方法的声明如下:
exchangeDeclare(String exchange, BuiltinExchangeType type, boolean durable, boolean autoDelete, boolean internal, Map<String,Object> arguments);
参数介绍;
exchange: 交换机名称
type: 交换机类型
DIRECT(“direct”): 定向
FANOUT(“fanout”): 扇形(广播),发送消息到每个与之绑定的队列
TOPIC(“topic”): 通配符
HEADERS(“headers”):参数匹配
durable: 是否持久化
autoDelete: 是否自动删除
internal: 是否内部使用,一般为false
arguments: 参数
调用exchangeDeclare函数如下:
String exchangeName = “test_fanout”;
channel.exchangeDeclare(exchangeName, BuiltinExchangeType.FANOUT, true, false, false, null);
b) 创建多个队列
String queue1Name = “test_fanout_queue1”