我可以创建一个连接来侦听队列并将消息发送到另一个交换机吗? 目前,如果我使用一个连接进行发送,我的客户会收到它,但它甚至不会被绑定到此交换。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#客户端实现中共享。
直到你严格线性工作(没有并行处理),你可以消耗进程并通过相同的通道发布(当然是相同的连接)。
注意事项对于一个连接打开的多个通道可以在通信方面互相阻塞。只有一个通道可以同时通过连接发送/接收。由于这种尝试组织连接和渠道,不会在同时发布和消费期间彼此阻止。
对不起,但我不明白你的问题。你是说你发送消息给交换机,并且它是在没有绑定的队列上收到的?如果是这样,你能显示交换和队列的配置,以及你用来发送消息的代码吗? –