C# 如何使用ServiceBusProcessor.ProcessErrorAsync

C# 如何使用ServiceBusProcessor.ProcessErrorAsync,c#,azureservicebus,C#,Azureservicebus,如果未指定ProcessMessageAsync和ProcessErrorAsync,则无法使用ServiceBusProcessor。第一种方法是什么,非常清楚,但我不确定在ProcessErrorAsync中应该做什么? 以下方法相同吗 var client = new ServiceBusClient(connectionString); var processor = _client.CreateProcessor(queueName); processor.ProcessMessag

如果未指定ProcessMessageAsync和ProcessErrorAsync,则无法使用ServiceBusProcessor。第一种方法是什么,非常清楚,但我不确定在ProcessErrorAsync中应该做什么? 以下方法相同吗

var client = new ServiceBusClient(connectionString);
var processor = _client.CreateProcessor(queueName);

processor.ProcessMessageAsync += async arg =>
{
    try
    {
        //process message
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
};

processor.ProcessErrorAsync += arg =>
{
    return Task.CompletedTask;
};

await _processor.StartProcessingAsync(cancellationToken);


ProcessMessageAsync
是一个处理程序,每次从服务总线实例读取消息并需要处理时,都会调用该处理程序。这就是您处理消息的业务逻辑所在

ProcessErrorAsync
是一个处理程序,允许您观察处理器运行期间发生的异常,包括消息处理代码和处理器基础结构本身

处理器具有弹性,尽最大努力从问题中恢复并继续处理。因此,它将忽略大多数异常,将它们呈现给处理程序,然后继续前进。错误处理程序是通知应用程序问题并采取适合应用程序的操作的方式

至于在处理程序中应该做什么,这在很大程度上取决于应用程序及其需求。至少,大多数应用程序都希望了解何时发生错误,并在以后需要进行案例分析时记录这些错误。您可能还希望使用它来检测有害消息或其他处理问题,并采取适合您的应用程序的操作

处理器不知道应用程序的设计或需求,也不知道它所在的环境。这意味着它无法做出明智的决定,决定什么时候正常的暂时性问题应该是致命的,或者什么时候应用程序生态系统中存在更大的问题。请务必记住,应用程序负责理解错误模式,并以不明显的方式确定应用程序或处理器是否不健康


例如,如果处理器无法到达您的服务总线实例,它将永远继续重试。如果应用程序在一段时间内始终看到这些异常,则可能是主机网络不健康的迹象,应用程序可能会选择停止处理并重置主机。同样,如果您的应用程序需要传入消息的特定模式,并且发布到服务总线实例的消息不正确,那么处理器将继续尝试处理它们,但是您的应用程序应该能够更好地识别更大的问题并采取适当的操作。

ProcessMessageAsync是一个处理程序,每次从服务总线实例读取消息并需要处理时都会调用它。这就是您处理消息的业务逻辑所在

ProcessErrorAsync
是一个处理程序,允许您观察处理器运行期间发生的异常,包括消息处理代码和处理器基础结构本身

处理器具有弹性,尽最大努力从问题中恢复并继续处理。因此,它将忽略大多数异常,将它们呈现给处理程序,然后继续前进。错误处理程序是通知应用程序问题并采取适合应用程序的操作的方式

至于在处理程序中应该做什么,这在很大程度上取决于应用程序及其需求。至少,大多数应用程序都希望了解何时发生错误,并在以后需要进行案例分析时记录这些错误。您可能还希望使用它来检测有害消息或其他处理问题,并采取适合您的应用程序的操作

处理器不知道应用程序的设计或需求,也不知道它所在的环境。这意味着它无法做出明智的决定,决定什么时候正常的暂时性问题应该是致命的,或者什么时候应用程序生态系统中存在更大的问题。请务必记住,应用程序负责理解错误模式,并以不明显的方式确定应用程序或处理器是否不健康

例如,如果处理器无法到达您的服务总线实例,它将永远继续重试。如果应用程序在一段时间内始终看到这些异常,则可能是主机网络不健康的迹象,应用程序可能会选择停止处理并重置主机。同样,如果您的应用程序期望传入消息具有特定的模式,并且发布到服务总线实例的消息不正确,那么处理器将继续尝试处理它们,但是您的应用程序应该能够更好地识别更大的问题并采取适当的措施

var client = new ServiceBusClient(connectionString);
var processor = _client.CreateProcessor(queueName);

processor.ProcessMessageAsync += async arg =>
{
    //process message
};

processor.ProcessErrorAsync += arg =>
{
    Console.WriteLine(ex.Message);
    return Task.CompletedTask;
};

await _processor.StartProcessingAsync(cancellationToken);