我有Windows服务,在服务启动时订阅RabbitMQ队列。
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: _serviceConfiguration.ExchangeName, type: _serviceConfiguration.ExchangeType);
var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName,
exchange: _serviceConfiguration.ExchangeName,
routingKey: _serviceConfiguration.RoutingName);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
//do stuff
};
}
对邮件执行的操作可能非常耗时,因为它会调用多个其他Web服务。
我是否正确假设我可以通过为每条消费消息启动新线程来提高性能?每个新线程都会花费大部分时间等待来自外部呼叫的响应。
我该怎么做?我对tasks / threads / await-async有点困惑。
我希望将创建的线程数限制为一些可配置的数量,因为传入的消息排队的速度可能远远快于它们的处理速度。