【发布时间】:2018-06-13 12:02:44
【问题描述】:
我正在使用RabbitMq 来处理我在公共汽车上收到的消息。我想知道是否有更好的方法来处理我收到的消息(可能使用async/await 模式)
这是我的代码的 sn-p
connection = connectionFactory.CreateConnection();
channel = connection.CreateModel();
channel.QueueDeclare(queue: Constants.RabbitListeningQueue,durable: false,exclusive: false,autoDelete: false,arguments: null);
channel.QueueDeclare(queue: Constants.RabbitMqRequestInsertedQueue,durable: false,exclusive: false,autoDelete: false,arguments: null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
log.Debug($"[x] Received message :{ea}");
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
var dynamicObject = JObject.Parse(message);
queueMessageHandler.HandleMessage(dynamicObject);
};
queueMessageHandler的实现如下
public class QueueMessageHandler : IQueueMessageHandler
{
private readonly IImportNucleoManager importNucleoManager;
public QueueMessageHandler(IImportNucleoManager importNucleoManager)
{
this.importNucleoManager = importNucleoManager;
}
public void HandleMessage(dynamic message)
{
switch ((string)message.Type)
{
case "T1":
{
importNucleoManager.Process(message);
break;
}
case "T3":
importNucleoManager.ProceedToInsertStep(message);
break;
}
}
}
我想知道(因为 T1/T3 事件需要很长时间才能处理)它们应该是Task,那么即使HandleMessage 也应该是HandleMessageAsync?在这种情况下,我还必须通过 async void,据我所知,这不是最佳做法
【问题讨论】:
标签: c# async-await rabbitmq task