1. 程式人生 > 實用技巧 >SpringBoot---RabbitMQ_2 (使用註解方式,fanout型別的交換器)

SpringBoot---RabbitMQ_2 (使用註解方式,fanout型別的交換器)

使用註解方式實現RabbitMq整合

RabbitMq交換器接收到的訊息會廣播到每一個繫結的訊息佇列。(fanout型別的交換器)

在進行該部分實驗前把之前的交換器和佇列刪除,在RabbitMq管理後臺完成。

1、RabbitMq配置類

@Configuration
public class RabbitMQConfig {
    /**
     * 定製JSON格式的訊息轉換器
     * @return
     */
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
    
    
//1、定義fanout型別的交換器 @Bean public Exchange fanout_exchange(){ return ExchangeBuilder.fanoutExchange("fanout_exchange").build(); } //2、定義兩個不同名稱的訊息佇列 @Bean public Queue fanout_queue_email(){ return new Queue("fanout_queue_email"); } @Bean public Queue fanout_queue_sms(){ return
new Queue("fanout_queue_sms"); } //3、將兩個不同名稱的訊息佇列跟交換器進行繫結 @Bean public Binding bindingEmail(){ return BindingBuilder.bind(fanout_queue_email()).to(fanout_exchange()).with("").noargs(); } @Bean public Binding bindingSms(){ return BindingBuilder.bind(fanout_queue_sms()).to(fanout_exchange()).with("").noargs(); } }

2、Service類

@Service
public class MessageService {
    @RabbitListener(bindings = @QueueBinding(value = @Queue("fanout_queue_email"),
    exchange =@Exchange(value = "fanout_exchange",type="fanout")))
    public void psubConsumerEmailAno(User user){
        System.out.println("郵件業務接收到訊息:"+user);
    }
    @RabbitListener(bindings = @QueueBinding(value = @Queue("fanout_queue_sms"),
            exchange =@Exchange(value = "fanout_exchange",type="fanout")))
    public void psubConsumerSmsAno(User user){
        System.out.println("簡訊業務接收到訊息:"+user);
}
}

3、在測試類中執行傳送訊息的方法(注意,在執行測試方法之前需要將伺服器類的監聽程式碼註釋掉)。

    @Test
    public void publishMag(){
        User user=new User();
        user.setAge(30);
        user.setId(10000L);
        user.setEmail("[email protected]");
        user.setUsername("builderMsg");
        for(int i=0;i<100;i++){
            rabbitTemplate.convertAndSend("fanout_exchange","",user);
        }
        System.out.println("訊息傳送成功!");
    }

4、啟動工程,觀察控制檯輸出。