rabbitmq實現向各服務廣播訊息
阿新 • • 發佈:2018-11-19
廣播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); } }