發布訂閱模式
把訊息傳送給多個訂閱者。也就是有多個消費端都完整的接收生產者的訊息
換句話說 把訊息廣播給多個消費者
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...