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());
}
}
私は上記のコードを持っていますが、スレッドの安全性が不思議です。C#RabbitMQクライアントスレッドの安全性
わかりませんが、ConnectionFactory
はスレッドセーフであると思います。しかし、その後、IConnection
がスレッドセーフであるかどうかわかりませんか?要求ごとに接続を作成する必要がありますか?むしろ単一の永続的な接続ですか?そして、IChannel
はどうですか?
また、私はThreadLocalとして接続を保存する必要がありますか?または、リクエストごとに接続を作成する必要がありますか?
この質問への私の答えを見るhttp://stackoverflow.com/questions/10407760/is-there-a-performance-difference-between-pooling-connections-or-channels-in-rab/10501593#10501593 – robthewolf