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());
}
}
上記のコードがあり、スレッドセーフに興味があります。
よくわかりませんが、ConnectionFactory
スレッドセーフだと思います。しかし、IConnection
スレッドセーフですか?リクエストごとに接続を作成する必要がありますか? それとも、単一の永続的な接続ですか? チャネル ( IModel
) はどうでしょうか。
また、接続を ThreadLocal として保存する必要がありますか? または、リクエストごとに接続を作成する必要がありますか?