【資料圖】
大家好,我是指北君。
今天指北君帶領(lǐng)大家接著學(xué)習(xí)RabbitMQ,了解RabbitMQ的五大通信模型之一的發(fā)布訂閱模型;接下來(lái)還會(huì)有關(guān)于RabbitMQ的系列教程,對(duì)你有幫助的話記得關(guān)注哦~
發(fā)布訂閱模型上一篇文章中,簡(jiǎn)單的介紹了一下RabbitMQ的work模型。這篇文章來(lái)學(xué)習(xí)一下RabbitMQ中的發(fā)布訂閱模型。
發(fā)布訂閱模型(Publish/Subscribe):簡(jiǎn)單的說(shuō)就是隊(duì)列里面的消息會(huì)被多個(gè)消費(fèi)者同時(shí)接受到,消費(fèi)者接收到的信息一致。
發(fā)布訂閱模型適合于做模塊之間的異步通信。
適用場(chǎng)景發(fā)送并記錄日志信息springcloud的config組件里面通知配置自動(dòng)更新緩存同步微信訂閱號(hào)演示生產(chǎn)者public class Producer { private static final String EXCHANGE_NAME = "exchange_publish_1"; public static void main(String[] args) throws IOException, TimeoutException { Connection connection = ConnectionUtils.getConnection(); Channel channel = connection.createChannel(); // 聲明交換機(jī) channel.exchangeDeclare(EXCHANGE_NAME, "fanout"); // 發(fā)送消息到交換機(jī) for (int i = 0; i < 100; i++) { channel.basicPublish(EXCHANGE_NAME, "", null, ("發(fā)布訂閱模型的第 " + i + " 條消息").getBytes()); } // 關(guān)閉資源 channel.close(); connection.close(); }}消費(fèi)者
// 消費(fèi)者1public class Consumer { private static final String QUEUE_NAME = "queue_publish_1"; private static final String EXCHANGE_NAME = "exchange_publish_1"; public static void main(String[] args) throws IOException, TimeoutException { Connection connection = ConnectionUtils.getConnection(); Channel channel = connection.createChannel(); // 聲明隊(duì)列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 聲明交換機(jī) channel.exchangeDeclare(EXCHANGE_NAME, "fanout"); // 將隊(duì)列綁定到交換機(jī) channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ""); DefaultConsumer defaultConsumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { System.out.println("隊(duì)列1接收到的消息是:" + new String(body)); } }; channel.basicConsume(QUEUE_NAME, true, defaultConsumer); }}
// 消費(fèi)者2public class Consumer2 { private static final String QUEUE_NAME = "queue_publish_2"; private static final String EXCHANGE_NAME = "exchange_publish_1"; public static void main(String[] args) throws IOException, TimeoutException { Connection connection = ConnectionUtils.getConnection(); Channel channel = connection.createChannel(); // 聲明隊(duì)列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 聲明交換機(jī) channel.exchangeDeclare(EXCHANGE_NAME, "fanout"); // 將隊(duì)列綁定到交換機(jī) channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ""); DefaultConsumer defaultConsumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { System.out.println("隊(duì)列2接收到的消息是:" + new String(body)); } }; channel.basicConsume(QUEUE_NAME, true, defaultConsumer); }}測(cè)試
先啟動(dòng)2個(gè)消費(fèi)者,再啟動(dòng)生產(chǎn)者
?可以看出來(lái)消費(fèi)者1和消費(fèi)者2接收到的消息是一模一樣的,每個(gè)消費(fèi)者都收到了生產(chǎn)者發(fā)送的消息;
發(fā)布訂閱模型,用到了一個(gè)新的東西-交換機(jī),這里也解釋一下相關(guān)方法的參數(shù):
// 聲明交換機(jī)channel.exchangeDeclare(EXCHANGE_NAME, "fanout");// 該方法的最多參數(shù)的重載方法是:Exchange.DeclareOk exchangeDeclare(String exchange, BuiltinExchangeType type, boolean durable, boolean autoDelete, boolean internal, Map // 將隊(duì)列綁定到交換機(jī)channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");/** * param1:destination,目的地,隊(duì)列的名字 * param2:source,資源,交換機(jī)的名字 * param3:routingKey,路由鍵(目前沒(méi)有用到routingKey,填 "" 即可) */小結(jié) 本文到這里就結(jié)束了,介紹了RabbitMQ通信模型中的發(fā)布訂閱模型,適合于做模塊之間的異步通信。
X 關(guān)閉
- 全球速遞!RabbitMQ之通信模型之發(fā)布訂閱模型
- 連續(xù)三年!Fortinet再次位列《 Gartner 企業(yè)級(jí)有線和無(wú)線局域網(wǎng)基礎(chǔ)設(shè)施魔力象限報(bào)告》“遠(yuǎn)見者” 焦點(diǎn)滾動(dòng)
- 環(huán)球觀焦點(diǎn):如何選擇網(wǎng)絡(luò)服務(wù)提供商
- Aruba SD-WAN及云安全產(chǎn)品正式上線AWS Marketplace (中國(guó)區(qū)), 搭建邊緣到云的安全連接_全球今亮點(diǎn)
- 阿里云搭建的網(wǎng)址,傻瓜式禁止國(guó)外IP訪問(wèn)
X 關(guān)閉
- 交發(fā)人|為工程提供全方位咨詢,他是項(xiàng)目的“把關(guān)者”_世界資訊
- 億萬(wàn)富翁勸誡兒子:世界上有2種人永遠(yuǎn)都不會(huì)富有,千萬(wàn)要遠(yuǎn)離,不然會(huì)越混越差
- 弱降水光臨 平潭未來(lái)天氣是這樣的
- 護(hù)航春運(yùn) 平潭多部門聯(lián)合開展安全檢查 世界新消息
- 云霄縣這一項(xiàng)工作經(jīng)驗(yàn)獲全省推廣!
- 【環(huán)球快播報(bào)】云霄縣委書記帶隊(duì)看望慰問(wèn)在漳離退休老干部
- 漳浦縣委書記慰問(wèn)困難黨員、脫貧戶、退休老干部:焦點(diǎn)熱議
- 15G資費(fèi)不大降!三大運(yùn)營(yíng)商誰(shuí)提供的5G網(wǎng)速最快?中國(guó)信通院給出答案
- 2聯(lián)想拯救者Y70發(fā)布最新預(yù)告:售價(jià)2970元起 迄今最便宜的驍龍8+旗艦
- 3亞馬遜開始大規(guī)模推廣掌紋支付技術(shù) 顧客可使用“揮手付”結(jié)賬
- 4現(xiàn)代和起亞上半年出口20萬(wàn)輛新能源汽車同比增長(zhǎng)30.6%
- 5如何讓居民5分鐘使用到各種設(shè)施?沙特“線性城市”來(lái)了
- 6AMD實(shí)現(xiàn)連續(xù)8個(gè)季度的增長(zhǎng) 季度營(yíng)收首次突破60億美元利潤(rùn)更是翻倍
- 7轉(zhuǎn)轉(zhuǎn)集團(tuán)發(fā)布2022年二季度手機(jī)行情報(bào)告:二手市場(chǎng)“飄香”
- 8充電寶100Wh等于多少毫安?鐵路旅客禁止、限制攜帶和托運(yùn)物品目錄
- 9好消息!京東與騰訊續(xù)簽三年戰(zhàn)略合作協(xié)議 加強(qiáng)技術(shù)創(chuàng)新與供應(yīng)鏈服務(wù)
- 10名創(chuàng)優(yōu)品擬通過(guò)香港IPO全球發(fā)售4100萬(wàn)股 全球發(fā)售所得款項(xiàng)有什么用處?