Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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());

    }

}