C#RabbitMQ客户端线程安全 ConnectionFactory=newconnectionfactory{HostName=“localhost”}; 使用(IConnection connection=factory.CreateConnection()) 使用(IModel channel=connection.CreateModel()) { channel.QueueDeclare(“hello”、false、false、false、null); 对于(int i=0;i
我有上面的代码,我对线程安全性很好奇 我不确定,但我可以想象,C#RabbitMQ客户端线程安全 ConnectionFactory=newconnectionfactory{HostName=“localhost”}; 使用(IConnection connection=factory.CreateConnection()) 使用(IModel channel=connection.CreateModel()) { channel.QueueDeclare(“hello”、false、false、false、null); 对于(int i=0;i,c#,multithreading,thread-safety,rabbitmq,C#,Multithreading,Thread Safety,Rabbitmq,我有上面的代码,我对线程安全性很好奇 我不确定,但我可以想象,ConnectionFactory是线程安全的。但是i连接线程安全吗?我应该为每个请求创建连接吗?或者更确切地说是单个持久连接?那频道(IModel)呢 另外,我应该将连接存储为ThreadLocal吗?还是应该为每个请求创建连接 i连接是线程安全的,IModel不是。通常,您应该努力在应用程序的生命周期内保持连接打开。如果您有需要开放连接以接收消息的消费者,则尤其如此。由于网络或代理故障,检测中断的连接并从中恢复非常重要。我建议阅读
ConnectionFactory
是线程安全的。但是i连接
线程安全吗?我应该为每个请求创建连接吗?或者更确切地说是单个持久连接?那频道(IModel
)呢
另外,我应该将连接存储为ThreadLocal吗?还是应该为每个请求创建连接 i连接是线程安全的,IModel不是。通常,您应该努力在应用程序的生命周期内保持连接打开。如果您有需要开放连接以接收消息的消费者,则尤其如此。由于网络或代理故障,检测中断的连接并从中恢复非常重要。我建议阅读Videla和Williams的《RabbitMQ在行动》,特别是第6章“编写能够在失败中生存的代码”
现在是一个无耻的插头。我是RabbitMQ的高级.NETAPI的作者。它为您执行所有连接管理,并在网络或代理中断时自动重新连接和重建所有订户。它还提供了现成的集群和故障转移支持。试试看。看到我对这个问题的回答“非常小心”了吗?这是什么样的模糊威胁?EasyNetQ在这里是一个非常合适的建议。如果人们不同意,这就是“向下投票”按钮的作用。如果他没有礼貌地放弃自己的作者身份,这个建议不太可能会被重新考虑。我会非常小心骑在你的马上那么高。回答得好。它与
ConnectionFactory factory = new ConnectionFactory {HostName = "localhost"};
using (IConnection connection = factory.CreateConnection())
using (IModel channel = connection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false, null);
for (int i = 0; i < 100000; i++)
{
MemoryStream stream = new MemoryStream();
var user = new User
{
Id = i
};
Serializer.Serialize(stream, user);
channel.BasicPublish("", "hello", null, stream.ToArray());
}
}