SpringBoot---RabbitMQ_2 (使用註解方式,fanout型別的交換器)
阿新 • • 發佈:2020-09-12
使用註解方式實現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(){ returnnew 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、啟動工程,觀察控制檯輸出。