向死信添加异常详细信息
Adding exception details to dead letters
将代理服务总线(在 Azure 中)与具有多个订阅的主题一起使用时,一些订阅在处理消息时会抛出异常。然后,这些消息会被放入该订阅的死信队列中。
我如何才能知道问题出在哪里,以及为什么邮件是死信?
我想我可以修改死信,但是用抛出的异常修改消息是常见的做法吗?如果是这样,这是如何使用 BrokeredMessage
对象完成的?可以使用 BrokeredMessage.Abandon(IDictionary[String, Object]) 放弃消息,但是使用它来记录异常是一种已知的做法还是有更好的方法?
我认为 ASB 没有办法自动将错误与死信消息一起保留在某处。不过,您可以做以下两件事之一:
- 当您调用
SubscriptionClient.OnMessage
时,使用带有 OnMessageOptions onMessageOptions
参数的重载,并在 onMessageOptionsExceptionReceived
中提供您的错误处理程序。每次在消息到达时发生未处理的异常时,ASB 都会调用它。然后您可以在您的日志中记录异常,以及消息 ID 等,以便以后进行故障排除。
- 或者不是让 ASB 看到您未处理的异常,而是在您的消息回调中使用 try / catch(
SubscriptionClient.OnMessage
中的第一个参数),并在那里记录相同的错误。
将代理服务总线(在 Azure 中)与具有多个订阅的主题一起使用时,一些订阅在处理消息时会抛出异常。然后,这些消息会被放入该订阅的死信队列中。
我如何才能知道问题出在哪里,以及为什么邮件是死信?
我想我可以修改死信,但是用抛出的异常修改消息是常见的做法吗?如果是这样,这是如何使用 BrokeredMessage
对象完成的?可以使用 BrokeredMessage.Abandon(IDictionary[String, Object]) 放弃消息,但是使用它来记录异常是一种已知的做法还是有更好的方法?
我认为 ASB 没有办法自动将错误与死信消息一起保留在某处。不过,您可以做以下两件事之一:
- 当您调用
SubscriptionClient.OnMessage
时,使用带有OnMessageOptions onMessageOptions
参数的重载,并在onMessageOptionsExceptionReceived
中提供您的错误处理程序。每次在消息到达时发生未处理的异常时,ASB 都会调用它。然后您可以在您的日志中记录异常,以及消息 ID 等,以便以后进行故障排除。 - 或者不是让 ASB 看到您未处理的异常,而是在您的消息回调中使用 try / catch(
SubscriptionClient.OnMessage
中的第一个参数),并在那里记录相同的错误。