RabbitMq学习笔记(三)—— 交换器(Pub/Topic)

//声明交换器(fanout:分发)rabbitmqctl list_exchanges 查看交换器规则

channel.exchangeDeclare("logs", "fanout");

//创建临时队列

String queueName = channel.queueDeclare().getQueue();

String message = "this is message in the fanout'exchange ";

//发送消息到交换器中

channel.basicPublish( "logs", "", null, message.getBytes());

//交换器绑定队列

channel.queueBind(queueName, "logs", "");



RabbitMQ中消息传递模型的核心思想是:生产者不直接发送消息到队列。实际的运行环境中,生产者是不知道消息会发送到那个队列上,她只会将消息发送到一个交换器,交换器也像一个生产线,她一边接收生产者发来的消息,另外一边则根据交换规则,将消息放到队列中。交换器必须知道她所接收的消息是什么?它应该被放到那个队列中?它应该被添加到多个队列吗?还是应该丢弃?这些规则都是按照交换器的规则来确定的。 


交换器的规则有:

  • direct (直连)

  • topic (主题)

  • headers (标题)

  • fanout (分发)也有翻译为扇出的。


匿名交换器 
在之前的教程中,我们知道,发送消息到队列时根本没有使用交换器,但是消息也能发送到队列。这是因为RabbitMQ选择了一个空“”字符串的默认交换器。


第一个参数就是交换器的名称。如果输入“”空字符串,表示使用默认的匿名交换器。 
第二个参数是【routingKey】路由线索 
匿名交换器规则: 
发送到routingKey名称对应的队列。


临时队列

如果要在生产者和消费者之间创建一个新的队列,又不想使用原来的队列,临时队列就是为这个场景而生的:

  1. 首先,每当我们连接到RabbitMQ,我们需要一个新的空队列,我们可以用一个随机名称来创建,或者说让服务器选择一个随机队列名称给我们。

  2. 一旦我们断开消费者,队列应该立即被删除。



以上转载

http://blog.csdn.net/chwshuang/article/details/50512057




评论

© dzxlovelar | Powered by LOFTER