RabbitMQ在一个连接中发送和使用消息

时间:2014-04-08 09:00:23

标签: c# rabbitmq producer-consumer

我可以创建一个连接来侦听队列并将消息发送到另一个交换机吗? 目前,如果我使用一个连接进行发送,我的消费者会收到它,但它甚至不受此交换的约束。

也许,应该更改一些设置?

2 个答案:

答案 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#客户端实现中共享。

在严格按照线性工作(无并行处理)之前,您可以使用相同的通道(当然是相同的连接)来处理和发布。

请注意为一个连接打开的多个频道可以在流量方面相互阻止。只有一个通道可以同时通过连接发送/接收。因此,尝试组织在同时发布和使用期间不会相互阻塞的连接和通道。