服务工作者有两种方法来处理来自 Azure服务总线队列的消息:
while (!ExitRequested)
{
try
{
var message = await _queueClient.ReceiveAsync(TimeSpan.FromSeconds(1));
if (message != null)
ProcessIt(message);
}
catch (Exception ex)
{
HandleIt(ex);
}
}
或 EAP :
var onMessageOptions = new OnMessageOptions();
onMessageOptions.ExceptionReceived += (sender, args) => HandleIt(args.Exception);
_queueClient.OnMessageAsync(ProcessIt, onMessageOptions);
WaitFor(ExitRequested);
这两种方法的优点和缺点是什么?应该在哪种特定场景中选择哪一个?
答案 0 :(得分:1)
ReceiveAsync
是ASB .NET客户端API的一部分。 OnMessage
API是本机ASB客户端提供的简化并发消息泵创建的方式,允许您“开箱即用”的一些功能,以便您不必手动处理这些功能。其中包括:
当您需要灵活性和严格控制事物时,这些优势也可被视为缺点。例如,如果您需要控制消息完成的执行方式,则需要关闭自动完成功能并自行完成。但是,当你需要在回调中一次处理多个传入消息时,OnMessage API不会让你,因为它一次只提供一条消息,你最好使用[ReceiveBatchAsync][1]
。我有post about OnMessage API个好处,你可以查看。
应该在哪种特定情况下选择哪一个?
根据您的要求和架构,您需要自己回答这些问题。如果您不需要严格控制事物并且一次处理一条消息(假设您可以同时执行多个消息处理),OnMessage API是一个简单的开始路径,ASB客户端做得很好。如果您需要处理批次并控制许多较低级别的方面,请使用MessageSender
/ MessageReceiver
方法。