RabbitMQ
Direct交换机:会将接收到的消息根据路由规则路由到指定的Queue,因此称为定向路由
- 每一个Queue都与Exchange设置一个BindingKey
- 发布者发送消息时,指定消息的RoutingKey
- Exchange将消息路由到BindingKey与消息RoutingKey一致的队列
rabbit管理平台设置
通过绑定routingKey来实现消息的指定发送
Direct案例
@Test
public void testFanoutExchange() throws InterruptedException {
//交换机名称
String exchangeName = "XXX.direct";
//消息
String message = "hello ,today is exchange direct.queue*";
//发送消息
rabbitTemplate.convertAndSend(exchangeName, "red",message);
System.out.println(message);
//Thread.sleep(20);
}
可以用direct实现广播的功能。
Topic交换机
TopicExchange和DirectExchange类似,区别在于routingKey可以是多个单词的列表,并且以.分割
Queue与Exchange指定BindingKey时可以使用通配符:
#: 代指0个或者多个单词
: 代指一个单词
例如:
china.#
关心以china打头的所有的情况。
china.*
关心以china打头的后面跟一个单词的情况
Topic案例
@Test
public void testTopicExchange() throws InterruptedException {
//队列名称
String exchangeName = "liuwei.topic";
//消息
String message = "hello ,today is exchange topic.queue1";
//发送消息
rabbitTemplate.convertAndSend(exchangeName, "china.kill.japan.news",message);
System.out.println(message);
//Thread.sleep(20);
}
rabbitMQ管理平台设置:
小结
交换机有三种模式:
- fanout
- direct
- topic