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());
}
}
Mam powyższy kod i jestem ciekawy bezpieczeństwa wątków.C# RabbitMQ Client thread safety
Nie jestem pewien, ale wyobrażam sobie, że ConnectionFactory
jest bezpieczny dla wątków. Ale nie jestem pewien, czy IConnection
jest bezpieczny dla wątków? Czy powinienem utworzyć połączenie na jedno żądanie? A może raczej jedno trwałe połączenie? A co z IChannel
?
Czy powinienem przechowywać połączenie jako ThreadLocal? A może powinienem utworzyć połączenie na jedno żądanie?
zobacz moją odpowiedź na to pytanie http://stackoverflow.com/questions/10407760/is-there-a-performance-difference-between-connections-or-channels-in-rab/10501593#10501593 – robthewolf