Topic和Direct、Fanout匹配解析
2017-08-25 17:54
302 查看
RabbitMQ详解
1.Direct Exchange 根据route key 直接找到队列
2.Topic Exchange 根据route key 匹配队列
3.Topic Exchange 不处理route key 全网发送,所有绑定的队列都发送
Direct Exchange是RabbitMQ默认的交换机模式,也是最简单的模式,根据key全文匹配去寻找队列。
Q1 绑定了一个
Q2 就有 2 个
当消息中的 路由键 和 这个 binding key 对应上的时候,那么就知道了该消息去到哪一个队列中。
代码演示 A
代码演示 B
2.Topic Exchange
Topic Exchange 转发消息主要是根据通配符。 在这种交换机下,队列和交换机的绑定会定义一种路由模式,那么,通配符就要在这种路由模式和路由键之间匹配后交换机才能转发消息。
在这种交换机模式下:
路由键必须是一串字符,用句号(
路由模式必须包含一个 星号(
具体代码发送的时候还是一样,第一个参数表示交换机,第二个参数表示routing key,第三个参数即消息。如下:
topic 和 direct 类似, 只是匹配上支持了”模式”, 在”点分”的 routing_key 形式中, 可以使用两个通配符:
3.Fanout Exchange
不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。
发送消息,只需要指定交换机,
MQ常用概念
快速入门使用
推荐查看 <目录
交换机(Exchange)1.Direct Exchange 根据route key 直接找到队列
2.Topic Exchange 根据route key 匹配队列
3.Topic Exchange 不处理route key 全网发送,所有绑定的队列都发送
交换机(Exchange)
1. Direct ExchangeDirect Exchange是RabbitMQ默认的交换机模式,也是最简单的模式,根据key全文匹配去寻找队列。
Q1 绑定了一个
binding key名字为
orange;
Q2 就有 2 个
binding key,名字为
black和
green。
当消息中的 路由键 和 这个 binding key 对应上的时候,那么就知道了该消息去到哪一个队列中。
代码演示 A
@Bean public Queue helloQueue() { return new Queue("retry_payment"); } @Bean DirectExchange exchange() { return new DirectExchange("retry_payment"); } //绑定一个key,当消息匹配到就会放到这个队列中 @Bean Binding bindingExchangeMessage(Queue queueMessage, DirectExchange exchange) { return BindingBuilder.bind(queueMessage).to(exchange).with("retry_payment"); }
//向指定routingKey中推送,推送到指定队列 rabbitTemplate.convertAndSend(exchange:"retry_payment", routingKey:"retry_payment", message:message);
代码演示 B
Channel channel = connection.createChannel(); channel.exchangeDeclare("retry_payment", "direct"); //声明一个交换机,direct 可以换位topic或者是fannout channel.queueDeclare("retry_payment"); //声明一个队列 channel.queueBind("queueName", "exchangeName", "routingKey"); //绑定路由键 //需要绑定路由键,发送消息 byte[] messageBodyBytes = "hello world".getBytes(); channel.basicPublish("exchangeName", "routingKey", MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);
2.Topic Exchange
Topic Exchange 转发消息主要是根据通配符。 在这种交换机下,队列和交换机的绑定会定义一种路由模式,那么,通配符就要在这种路由模式和路由键之间匹配后交换机才能转发消息。
在这种交换机模式下:
路由键必须是一串字符,用句号(
.) 隔开,比如说 agreements.us,或者 agreements.eu.stockholm 等。
路由模式必须包含一个 星号(
*),主要用于匹配路由键指定位置的一个单词,比如说,一个路由模式是这样子:agreements..b.*,那么就只能匹配路由键是这样子的:第一个单词是 agreements,第四个单词是 b。 井号(#)就表示相当于一个或者多个单词,例如一个匹配模式是agreements.eu.berlin.#,那么,以agreements.eu.berlin开头的路由键都是可以的。
具体代码发送的时候还是一样,第一个参数表示交换机,第二个参数表示routing key,第三个参数即消息。如下:
rabbitTemplate.convertAndSend("testTopicExchange","key1.a.c.key2", " this is RabbitMQ!");
topic 和 direct 类似, 只是匹配上支持了”模式”, 在”点分”的 routing_key 形式中, 可以使用两个通配符:
*表示一个词.
#表示零个或多个词.
3.Fanout Exchange
不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。
发送消息,只需要指定交换机,
route key可以为空
给消息设置属性值
设置请求头或者编码 MessageProperties messageProperties= message.getMessageProperties();
相关文章推荐
- RabbitMQ Exchange Type(Direct/Fanout/Topic)理解测试
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
- rabbitmq的三种exchange使用fanout+direct+topic
- [转]RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
- rabbitmq direct、fanout、topic 三种Exchange java 代码比较
- rabbitmq direct、fanout、topic 三种Exchange java 代码比较
- RabbitMQ三种Exchange模式(fanout,direct,topic)的特性 -摘自网络
- 【RabbitMQ】——三种Exchange模式(Fanout、Direct、Topic)
- RabbitMQ三种Exchange模式(fanout,direct,topic)介绍
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
- RabbitMQ消息处理机制fanout,direct,topic,header
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
- RabbitMQ三种Exchange模式(fanout,direct,topic)
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)
- RabbitMQ三种Exchange模式(fanout,direct,topic)
- 【深度学习:CNN】Dropout解析(2)