direct exchange幫助我們解決了分類發布與訂閱訊息的問題,但是direct exchange的問題是,它所使用的routingkey是乙個簡單字串,這決定了它只能按照乙個條件進行分類。
比如rabbitmq學習筆記(四)routing中的列子,我們是按照新聞的型別分類的,分為game, sport, music。
如果game下面有ff7,ff8的子分類,sport下面有soccer, basketball的分類。現在我們要求消費者程式接收game下面ff7子類別的所有新聞,sport下面的soccer子類別的所有新聞 ,以及所有的music新聞,單單使用direct exchange不能幫助我們解決這個問題。
topic exchange和direct exchange的用法基本一樣。
他們的區別是, topic exchange在指定routingkey的時候,必須使用乙個單詞列表,每個單詞之間用」.」間隔, 例如game.ff7, sport.soccer, topic exchange使用的routingkey的最大長度是256位元組。
而且在topic exchange的routingkey中可以使用2種萬用字元
你甚至可以這樣寫*.*.rabbit,表示所有3級新聞類別兔子的新聞,zoo.grass.rabbit和zoo.cage.rabbit都可以匹配
使用topic exchange
傳送訊息需要指定新聞分類 ,命令格式「dotnet run [分類路徑] [訊息資訊]」
static void main(string args);using (var connection = factory.createconnection())
news: ";
var body = encoding.utf8.getbytes(message);
channel.basicpublish(exchange: "topicexchange",
routingkey: messagetype,
basicproperties: null,
body: body
);console.writeline("[x] sent ", message);}}
}
static void main(string args)啟動乙個send程式,2個receive程式;using (var connection = factory.createconnection())
var consumer = new eventingbasicconsumer(channel);
consumer.received += (model, ea) =>
", message);
};channel.basicconsume(queue: queuename, autoack: true, consumer: consumer);
console.read();}}
}
乙個receive程式訂閱ff7下面的所有新聞(包含ff7下面所有的子類別新聞),soccer下面的所有新聞(包含soccer下面的所有子類別新聞),music下的所有新聞(不包括子類別新聞)
乙個receive程式訂閱ff8下面的所有新聞(包含ff8下面所有的子類別新聞),basketball下面的所有新聞(包含basketball下面的所有子類別新聞)。
RabbitMq學習筆記(五) Topic
receivetopicone 匹配規則1 宣告交換器和佇列 channel.exchangedeclare exchange name,topic string queuename channel.queuedeclare getqueue 路由關鍵字規則 string routingkeys n...
rabbitmq學習筆記一
首先我們先看rabbitmq原理圖 exchange交換器 接受訊息和路由訊息,然後將訊息傳送給訊息佇列。對於每乙個虛擬主機內部,交換器有獨一無二的名字 應用程式在其許可權範圍之內可以自由建立 共享 使用和銷毀交換例項。持久交換器可以使持久的 臨時的 或者自動刪除的。持久直到顯式刪除時消失 臨時交換...
RabbitMQ學習筆記1
博主從事網路程式設計3年了,但是說來慚愧的是,工作中沒有使用過訊息佇列。所以呢,打算從今天開始系統學習一些訊息佇列相關的知識,部落格也就作為筆記了。記錄一下自己的一些理解過程,有不對之處希望各位指出。生產者 消費者與訊息佇列 首先呢,訊息佇列不生產資料,他只是乙個資訊的搬運工具。資料由生產者提供,經...