我可以創建一個連接來偵聽隊列並將消息發送到另一個交換機嗎? 目前,如果我使用一個連接進行發送,我的客戶會收到它,但它甚至不會被綁定到此交換。RabbitMQ在一個連接內發送和使用消息
也許,一些設置應該改變?
我可以創建一個連接來偵聽隊列並將消息發送到另一個交換機嗎? 目前,如果我使用一個連接進行發送,我的客戶會收到它,但它甚至不會被綁定到此交換。RabbitMQ在一個連接內發送和使用消息
也許,一些設置應該改變?
是的, 你可以使用相同的連接,但你必須使用兩個通道。
在這裏閱讀:http://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html
例如:
using (var channel = myConnection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false, null);
var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("", true, consumer);
,並用相同的連接...
using (var channel = myConnection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false, null);
string message = "Hello World!";
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish("", "", null, body);
Console.WriteLine(" [x] Sent {0}", message);
}
請注意: C#的渠道是不是多線程所以你應該爲線程創建一個。
是的,當然可以。
在RabbitMQ的,你想保持連接(至少一個)作爲開放 只要有可能,由於開放每次各一個和 對性能的影響,它在線程C#的安全。
對面。通道意味着爲每個線程打開 ,並且不能在C#客戶端實現中共享。
直到你嚴格線性工作(沒有並行處理),你可以消耗進程並通過相同的通道發佈(當然是相同的連接)。
注意事項對於一個連接打開的多個通道可以在通信方面互相阻塞。只有一個通道可以同時通過連接發送/接收。由於這種嘗試組織連接和渠道,不會在同時發佈和消費期間彼此阻止。
對不起,但我不明白你的問題。你是說你發送消息給交換機,並且它是在沒有綁定的隊列上收到的?如果是這樣,你能顯示交換和隊列的配置,以及你用來發送消息的代碼嗎? –