廣播fanout
主要是將一個消息,分發到綁定了它的隊列上,而這些隊列如消費者
自己去建立和綁定!
對生產者是解耦的
生產者不需要關心消費者有多少,消費者如果需要這種消息,只需要把隊列綁定到exchange上即可
流程
- 打開rabbitmq的ui
- 建立兩個隊列fanout1,fanout2
- 打開exchange里的amqp.fanout類型
- 綁定上面的兩個隊列
- 向exchange里發消息
- 回到隊列頁面,這時可以看到每個隊列都收到了消息
例子
@Component
public class AmqpConfig {
public static final String LIND_FANOUT_EXCHANGE = "lindFanoutExchange";
/**
* 廣播交換機.
*
* @return
*/
@Bean
public FanoutExchange fanoutExchange() {
return new FanoutExchange(LIND_FANOUT_EXCHANGE);
}
}
生產者
/**
* 發布廣播消息.
*
* @param message .
*/
public void fanoutPublish(String message) {
try {
rabbitTemplate.convertAndSend(AmqpConfig.LIND_FANOUT_EXCHANGE, null, "廣播消息");
} catch (Exception e) {
e.printStackTrace();
}
}
消費者
@Component
public class FanoutSubscriber {
@Autowired
AmqpConfig amqpConfig;
@Bean
public Queue product1Queue() {
return new Queue("product1.queue");
}
@Bean
public Queue product2Queue() {
return new Queue("product2.queue");
}
@Bean
public Binding product1QueueBinding() {
return BindingBuilder.bind(product1Queue()).to(amqpConfig.fanoutExchange());
}
@Bean
public Binding product2QueueBinding() {
return BindingBuilder.bind(product2Queue()).to(amqpConfig.fanoutExchange());
}
@RabbitListener(queues = "product1.queue")
public void product1(String data) {
System.out.println(data);
}
@RabbitListener(queues = "product2.queue")
public void product2(String data) {
System.out.println(data);
}
}