我可以创建一个连接来侦听队列并将消息发送到另一个交换机吗? 目前,如果我使用一个连接进行发送,我的消费者会收到它,但它甚至不受此交换的约束。
也许,应该更改一些设置?
答案 0 :(得分:1)
是, 您可以使用相同的连接,但必须使用两个通道。
REad: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#通道不是多线程的,所以你应该为线程创建一个。
答案 1 :(得分:1)
是的,确定你可以坚持下去。
在RabbitMq中,您希望将连接(至少一个)保持为打开状态 由于每个开放的性能影响,所以尽可能长 每一次,它都在C#中安全线程。
相反。通道意味着为每个线程打开 并且无法在C#客户端实现中共享。
在严格按照线性工作(无并行处理)之前,您可以使用相同的通道(当然是相同的连接)来处理和发布。
请注意为一个连接打开的多个频道可以在流量方面相互阻止。只有一个通道可以同时通过连接发送/接收。因此,尝试组织在同时发布和使用期间不会相互阻塞的连接和通道。