rabbitmq實現向各服務廣播消息

廣播fanout

主要是將一個消息,分發到綁定了它的隊列上,而這些隊列如消費者自己去建立和綁定!

對生產者是解耦的

生產者不需要關心消費者有多少,消費者如果需要這種消息,只需要把隊列綁定到exchange上即可

流程

  1. 打開rabbitmq的ui
  2. 建立兩個隊列fanout1,fanout2
  3. 打開exchange裏的amqp.fanout類型
  4. 綁定上面的兩個隊列
  5. 向exchange裏發消息
  6. 回到隊列頁面,這時可以看到每個隊列都收到了消息

例子

@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);
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章