如何在masstransit中记录失败的消息?

ams*_*tix 6 .net masstransit

我正在寻找一个很好的解决方案来记录失败的消息,在超过重试限制之后,没有处理错误队列.到目前为止我发现了什么:

  • 我可以从InMemoryInboundMessageTracker继承并覆盖IsRetryLimitExceeded,但此时除了id之外没有关于消息本身的信息.
  • 我可以实现IInboundMessageInterceptor并在Pre/PostDispatch中获取IConsumeContext,但此时没有关于成功/失败的信息.

因此,作为一个解决方案,我可以在PreDispatch中获取IConsumeContext,将其置于某种缓存中,然后在超出重试限制时将其从IsRetryLimitExceeded中的缓存中取出.

方法按以下顺序调用:IsRetryLimitExceeded - > PreDispatch - > PostDispatch

所以我找不到从缓存中删除成功处理的消息的好地方.

当然我可以使用大小有限的缓存,但整个解决方案似乎很奇怪.

任何关于这个问题的想法将不胜感激.

Chr*_*son 2

您可以在总线上实现和配置您自己的消息重试跟踪,以便失败的消息可以通过您的实现传递。您可以委托给默认重试跟踪器并仅拦截事件,以便您可以对它们采取行动,或者如果需要,您可以实现自己的重试跟踪。

MessageTrackerFactory是配置的委托,我认为接口就在附近。