RabbitMQ入門學習系列 四 發布訂閱模式

2021-09-26 01:37:33 字數 1913 閱讀 1446

發布訂閱模式

把訊息傳送給多個訂閱者。也就是有多個消費端都完整的接收生產者的訊息

換句話說 把訊息廣播給多個消費者

rabbitmq不傳送訊息給佇列,生產者也不知道訊息傳送到佇列

生產者只傳送訊息到exchange 交換器,

exchange一方面從生產者接收訊息,另一方面把訊息推送到佇列中。

exchange必須知道如何處理接收到的訊息 。是加到特定佇列中,還是新增到多個佇列中,還是放棄。這個是由他的型別來決定 。

而訊息的型別有四種,分別是

direct,topic,headers,fanout
fanout訊息型別可以把訊息廣播到所有佇列中。

指定exchange的名稱為logs,routingkey設定為空。

channel.basicpublish(exchange: "logs",

routingkey: "",

basicproperties: null,

body: body);

為佇列的名稱指定乙個隨機數

var queuename = channel.queuedeclare().queuename;

channel.queuedeclare(queue: queuename,

durable: true,

exclusive: false,

autodelete: false,

arguments: null);

經過對之前**的改造

我們定義了乙個可以廣播型別的exchange和乙個隨機名字的佇列 ,

現在我們需要把他們繫結起來。

channel.queuebind(queue: queuename, exchange: "logs", routingkey: "");
建立連線

建立通道

宣告型別為fanout的訊息

publish傳送訊息

static void main(string args)

; using (var connection = factory.createconnection())

using (var channel = connection.createmodel())

,id=", message,i);

thread.sleep(1000);}}

console.writeline(" press [enter] to exit.");

console.readline();

}

建立連線

建立通道

宣告型別為fanout的訊息

宣告乙個佇列

把佇列然後繫結到通道上

接收訊息

static void main(string args)

; using (var connection = factory.createconnection())

", message);

thread.sleep(3000);//模擬耗時任務 ,

console.writeline("received over");

channel.basicack(deliverytag: e.deliverytag, multiple: false);

};channel.basicconsume(queue: queuename, autoack: false, consumer: consumer);

console.writeline("");

console.readline();}}

}

啟了乙個生產者,兩個消費者,生產者傳送10條訊息 ,兩個消費者都收到了10條訊息

RabbitMQ入門學習系列 七 遠端呼叫RPC

生產者和消費者啟動以後,都有乙個接收事件,消費者是接收事件是處理呼叫方法以後等待生產者的返回,生產者的接收事件是處理接收生產者傳送的訊息,進行處理。消費者傳送的時候要在 佇列中加入乙個標識,標明是哪個方法進行的呼叫 生產者接收到消費以後,如果發現有訊息標識 把訊息標識繼續返回去,這樣消費者可以保證接...

Oracle Essbase入門系列(四)

除了大綱計算,維度成員的另一項重要屬性是儲存型別,儲存型別決定維度成員相關單元格的物理儲存方式。在維庫中編輯成員的 data storage 屬性,下拉列表中可選的5種,再加上shared成員,一共6種儲存型別。store 儲存資料。當乙個單元格所有成員的儲存型別都是store時,單元格的資料會物理...

Python入門系列(四)

今天我們分享一下python中的字串格式化,python的字串格式化,大致分為兩種 使用 對字串進行格式化 s 字串,格式化字串,並提供佔位符 name 張三 print 我的名字是 s name 我的名字是 張三為了方便擴充套件,我們把這個例子再次拓展一下,name 張三 age 30 score...