向死信添加异常详细信息

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 中的第一个参数),并在那里记录相同的错误。