SpringBoot-RabbitMQ廣播模式


生產者

配置生產者

/**
 * @author BNTang
 */
@Configuration
public class FanoutConfig {

    /**
     * 聲明交換機
     *
     * @return 交換機
     */
    @Bean
    public FanoutExchange fanoutExchange() {
        return new FanoutExchange("logs");
    }

    /**
     * 聲明隊列
     *
     * @return 隊列
     */
    @Bean
    public Queue fanoutQueue1() {
        return new Queue("fanout_queue1");
    }

    /**
     * 聲明隊列
     *
     * @return 隊列
     */
    @Bean
    public Queue fanoutQueue2() {
        return new Queue("fanout_queue2");
    }

    /**
     * 把fanout_queue1隊列綁定到交換機
     *
     * @return 交換機
     */
    @Bean
    public Binding binding1() {
        return BindingBuilder.bind(fanoutQueue1()).to(fanoutExchange());
    }

    /**
     * 把fanout_queue2隊列綁定到交換機
     *
     * @return 交換機
     */
    @Bean
    public Binding binding2() {
        return BindingBuilder.bind(fanoutQueue2()).to(fanoutExchange());
    }
}

發送消息

@Test
public void testFanout() {
    this.rabbitTemplate.convertAndSend("logs", "", "這是日志廣播");
    System.out.println("消息發送成功");
}

消費者

消費消息

/**
 * @author BNTang
 */
@Component
public class FanoutCustomer {

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("fanout_queue1"),
            exchange = @Exchange(name = "logs", type = ExchangeTypes.FANOUT)
    ))
    public void receive1(String message) {
        System.out.println("消費者【1】接收到消息:" + message);
    }

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("fanout_queue2"),
            exchange = @Exchange(name = "logs", type = ExchangeTypes.FANOUT)
    ))
    public void receive2(String message) {
        System.out.println("消費者【2】接收到消息:" + message);
    }
}

以上注解中的屬性解釋如下:

  • value:綁定隊列。
  • exchange:綁定交換機。
  • type:聲明交換機類型。

測試方式同之前章節中的一樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM