什麼是分裂(Fanout)模式?
- 當我們需要將消息一次發送給多個隊列時,需要使用這種設計模式。如下圖
- 任何發送到 Fanout Exchange 的消息都會被轉發到與該Exchange綁定(Binding)的所有Queue上。
- 可以理解爲路由表的模式。
- 這種模式不需要RouteKey。
- 這種模式需要提前將 Exchange 與 Queue 進行綁定,一個Exchange可以綁定多個Queue,一個Queue可以同多個Exchange進行綁定。
- 如果接受到消息的Exchange沒有與任何Queue綁定,則消息會被拋棄。
1),在Queue中添加隊列 itcast , itheima 和ittest,如下
2),新建交換器(Exchange) chuanzhi ,如下
3),點進去 chuanzhi 點擊Bindings 綁定隊列
4),接下來用代碼來實現分裂模式(Fanout)
4-1), 代碼實現-消息生產者
/**
* 分裂模式
*/
@Test
public void sendDivisionMsg(){
rabbitTemplate.convertAndSend("chuanzhi","","分裂者模式走起");
}
@Component
@RabbitListener(queues = "itheima")
public class Consumer1 {
@RabbitHandler
public void getMessage(String msg) {
System.out.println("itheima" + msg);
}
}
監聽ittest的消息
@Component
@RabbitListener(queues = "ittest")
public class Consumer2 {
@RabbitHandler
public void getMessage(String msg) {
System.out.println("ittest" + msg);
}
}
監聽itcast的消息
@Component
@RabbitListener(queues = "itcast")
public class Consumer {
@RabbitHandler
public void getMessage(String msg) {
System.out.println("itcast" + msg);
}
}
5),測試如下
運行springtboot項目 , 運行test的分裂者模式方法,控制顯示如下