Fanout

rabbitMq详解

强颜欢笑 提交于 2019-11-28 19:48:05
RabbitMq是基于Amqp(Advanced Message Queuing Protocol,高级消息队列协议)实现的 Amqp协议有以下几个需要了解的概念: Virtual Host。一个Virtual Host可对应多个交换机多个队列,意思就是多一层分割,可以将应用通过虚拟主机分开。 Publisher:消息的提供者,通过交换机根据路由键将消息发送到队列中。 Exchange:交换器,用来做一层路由的功能,通过路由键的绑定信息,发送消息到相应的队列。(发送的方式也是有很多种,direct( 只根据对应的路由键发送给对应的队列 。),topic( 也是根据路由键发送,但是可以匹配正则表达式,即可以发送给多个经过筛选的队列 ),fanout( 广播模式,将消息发送到所有的对应的队列之下 )) Routing key:路由键,用来绑定交换器和队列,代表着一个路径。 Bindings: 绑定信息,通过路由键实现 Message Queue: 队列,最终存储消息的位置。 Consumer:订阅队列,获取消息,可订阅多个队列。 回调机制: 如果消息到达了交换机,可以通过RabbitTemplate.ConfirmCallback的方法,如果消息达到了,就会回调一个true的ACK,如果没到达,返回false的ACK,如果消息到达了交换机 final RabbitTemplate

(翻译)RabbitMQ Java Client教程(四)路由

梦想的初衷 提交于 2019-11-25 20:37:57
原文地址: https://www.rabbitmq.com/tutorials/tutorial-four-java.html 在前一篇教程中我们构建了一个日志系统。现在我们知道如何把日志消息广播发送给多个接受者了。 在本篇教程中我们将增加一个功能——允许订阅者只获取它感兴趣得一部分消息。比如我们仅把严重错误的日志存储到日志文件,而将所有的日志消息都打印到控制台。 绑定 在之前的章节中我们已经创建过交换器和队列的绑定。你可能还记得下边的代码: channel.queueBind(queueName, EXCHANGE_NAME, ""); 绑定表示交换器和队列之间的一种关系。这可以简单描述为:队列只对这个交换器的消息感兴趣。 绑定关系可以使用一个额外的==routingKey==参数。为了避免与==basic_publish==中的参数混淆,在这里我们叫它==binding key==。下边是我们使用一个key参数创建绑定关系的代码: channel.queueBind(queueName, EXCHANGE_NAME, "black"); binding key的作用于交换器的类型有关。我们之前使用的fanout交换器,会直接忽略该参数。 Direct 交换器 我们前一篇教程的日志系统会广播消息给所有的消费者。现在我们要扩展这个系统,使它可以根据消息的严重程度进行过滤