日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringAMQP--FanoutExchange

發布時間:2024/4/13 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringAMQP--FanoutExchange 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Fanout

Fanout,英文翻譯是扇出,我覺得在MQ中叫廣播更合適。

在廣播模式下,消息發送流程是這樣的:

  • 1) 可以有多個隊列

  • 2) 每個隊列都要綁定到Exchange(交換機)

  • 3) 生產者發送的消息,只能發送到交換機,交換機來決定要發給哪個隊列,生產者無法決定

  • 4) 交換機把消息發送給綁定過的所有隊列

  • 5) 訂閱隊列的消費者都能拿到消息

我們的計劃是這樣的:

  • 創建一個交換機 rabbitmq.fanout,類型是Fanout

  • 創建兩個隊列fanout.queue1和fanout.queue2,綁定到交換機rabbitmq.fanout

聲明隊列和交換機

Spring提供了一個接口Exchange,來表示所有不同類型的交換機:

在consumer中創建一個類,聲明隊列和交換機:

import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.core.Queue; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;@Configuration public class FanoutConfig {/*** 聲明交換機* @return Fanout類型交換機*/@Beanpublic FanoutExchange fanoutExchange(){return new FanoutExchange("rabbitmq.fanout");}/*** 第1個隊列*/@Beanpublic Queue fanoutQueue1(){return new Queue("fanout.queue1");}/*** 綁定隊列和交換機*/@Beanpublic Binding bindingQueue1(Queue fanoutQueue1, FanoutExchange fanoutExchange){return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange);}/*** 第2個隊列*/@Beanpublic Queue fanoutQueue2(){return new Queue("fanout.queue2");}/*** 綁定隊列和交換機*/@Beanpublic Binding bindingQueue2(Queue fanoutQueue2, FanoutExchange fanoutExchange){return BindingBuilder.bind(fanoutQueue2).to(fanoutExchange);} }

消息發送

在publisher服務的SpringAmqpTest類中添加測試方法:

@Test public void testFanoutExchange() {// 隊列名稱String exchangeName = "rabbitmq.fanout";// 消息String message = "hello, everyone!";rabbitTemplate.convertAndSend(exchangeName, "", message); }

消息接收

在consumer服務的SpringRabbitListener中添加兩個方法,作為消費者:

@RabbitListener(queues = "fanout.queue1") public void listenFanoutQueue1(String msg) {System.out.println("消費者1接收到Fanout消息:【" + msg + "】"); }@RabbitListener(queues = "fanout.queue2") public void listenFanoutQueue2(String msg) {System.out.println("消費者2接收到Fanout消息:【" + msg + "】"); }

總結

交換機的作用是什么?

  • 接收publisher發送的消息

  • 將消息按照規則路由到與之綁定的隊列

  • 不能緩存消息,路由失敗,消息丟失

  • FanoutExchange的會將消息路由到每個綁定的隊列

聲明隊列、交換機、綁定關系的Bean是什么?

  • Queue

  • FanoutExchange

  • Binding

總結

以上是生活随笔為你收集整理的SpringAMQP--FanoutExchange的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。