简介:允许将同一条消息发送给多个消费者;
实现方式:加入exchange交换机。
exchange常见类型包括:
1、fanout:广播
2、Direct:路由
3、Topic话题
注意:exchange负责消息路由,而不是存储,路由失败则消息丢失。
发布订阅-Fanout Exchange
Fanout Exchange 会将接收到的消息路由到每一个跟其绑定的queue
代码:
@Configuration
public class FanoutConfig {
@Bean
public FanoutExchange fanoutExchange() {
return new FanoutExchange("wsy.fanout");
}
@Bean
public Queue fanoutQueue1() {
return new Queue("fanout.queue1");
}
@Bean
public Queue fanoutQueue2() {
return new Queue("fanout.queue2");
}
@Bean
public Binding bindingQueue1(Queue fanoutQueue1,FanoutExchange fanoutExchange){
return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange);
}
@Bean
public Binding bindingQueue2(Queue fanoutQueue2,FanoutExchange fanoutExchange){
return BindingBuilder.bind(fanoutQueue2).to(fanoutExchange);
}
结果:
消息接收 @RabbitListener(queues = "fanout.queue1")
public void listenFanoutQueue1Message(String msg)throws InterruptedException {
System.out.println("消费者接收到fanout.queue1消息:{"+ msg + "}");
}
@RabbitListener(queues = "fanout.queue2")
public void listenFanoutQueue2Message(String msg)throws InterruptedException {
System.out.println("消费者接收到fanout.queue2消息:{"+ msg + "}");
}
消息发送
@Test
public void testSendFanoutExchange() {
//交换机名称
String exchangeName = "wsy.fanout";
//消息
String message = "hello,FanoutExchange";
//发送消息
rabbitTemplate.convertAndSend(exchangeName, "",message);
}
成功



