使用多线程时RabbitMQ的问题:没有指定的端点可达

时间:2015-02-14 13:36:16

标签: c# .net multithreading task-parallel-library rabbitmq

我正在使用RabbitMQ并需要向队列发送一些消息。 所以,如果我只发送一条消息就行了。 但是如果我同时发送了大量的消息,我需要测试它是如何工作的,所以我创建了一个使用多线程发送消息的简单应用程序。 发送消息的功能与我发送单个消息的情况完全相同,唯一的区别是现在我在Task中调用此函数。 一旦我运行我的应用程序,我收到错误消息。它说:附加信息:没有指定的端点可达 在行中:using(var connection = factory.CreateConnection())

这些是我发送消息的初始行:

var factory = new ConnectionFactory() { 
HostName = Constants.RabbitQueueHostName ,
Port = AmqpTcpEndpoint.UseDefaultPort
};

using (var connection = factory.CreateConnection()){
using (var channel = connection.CreateModel()){
...

所以这有点奇怪。通常我使用MSMQ并且从未遇到过MSMQ这样的问题.. 请指教。

1 个答案:

答案 0 :(得分:1)

您是否尝试过不使用using语句作为实验?

另见:

http://www.rabbitmq.com/javadoc/com/rabbitmq/client/Channel.html

  

多个线程可以安全地使用通道实例。对通道的请求是序列化的,一次只有一个线程运行命令。因此,应用程序可能更喜欢每个线程使用一个Channel,而不是跨多个线程共享相同的Channel。对此的一个重要警告是,当多个线程之间共享Channel时,无法正确处理确认。因此,在这种情况下,确保多个线程不会同时访问Channel实例非常重要。

http://architects.dzone.com/articles/rabbitmq-amqp-channel-best

  

频道不是线程安全的。您应该在单个线程上创建和使用通道。在混合使用服务器和客户端的方法时,您应该特别小心。在交付处理程序中调用发布就是一个例子。