丢弃来自 nServiceBus 修改器的消息
Discard message from nServiceBus mutator
如果存在特定 header,我需要丢弃消息。
我尝试在 MutateIncoming 中实现 IMutateTransportMessages 并调用 DoNotContinueDispatchingCurrentMessageToHandlers() 方法,但无论如何消息都会被发送到处理程序。
我可以使用处理程序丢弃消息,但我不喜欢它,因为我还需要指定处理程序的顺序。
有什么解决办法吗?
谢谢,
费德里科
我认为消息修改器不可能做到这一点。毕竟,这并不是真正的 activity 消息修改器应该做的事情——它与更改消息结构无关。
我同意你的看法,在处理程序中执行此操作听起来很麻烦,因为你是对的 - 那么你非常依赖处理程序的顺序。
由于 header 的存在(或不存在)而丢弃消息是一个基础设施问题,并且由于您使用的是 NServiceBus V5,自定义基础设施的最佳方法是自定义消息处理管道.
这里是 the relevant documentation that covers creating a behavior and inserting it into the pipeline 但这是简短的版本:
- 您需要创建一个实现
IBehavior<IncomingContext>
的行为。所有行为共同形成一个行为链,通过调用 next()
- 实现中存在的 Action
方法进入下一步。
- 在行为中,检查您的 header。要停止处理消息,只需不调用
next()
而是调用 context.DoNotInvokeAnyMoreHandlers()
。
- 创建一个 class 继承
RegisterStep
,它将从其构造函数中定义在管道中的何处插入您的行为。您可以在 MutateIncomingTransportMessage
步骤之前注册它。
- 创建一个 class 实现
INeedInitialization
(请注意,这可能与 RegisterStep
class 相同)调用 busConfig.Pipeline.Register<TClassThatInheritsRegisterStep>()
.
同样,这是简短版本。查看 docs 了解完整故事和示例。
无耻外挂:这个过程在第7章Learning NServiceBus - Second Edition中也有详细描述,有例子。
如果存在特定 header,我需要丢弃消息。
我尝试在 MutateIncoming 中实现 IMutateTransportMessages 并调用 DoNotContinueDispatchingCurrentMessageToHandlers() 方法,但无论如何消息都会被发送到处理程序。
我可以使用处理程序丢弃消息,但我不喜欢它,因为我还需要指定处理程序的顺序。
有什么解决办法吗?
谢谢, 费德里科
我认为消息修改器不可能做到这一点。毕竟,这并不是真正的 activity 消息修改器应该做的事情——它与更改消息结构无关。
我同意你的看法,在处理程序中执行此操作听起来很麻烦,因为你是对的 - 那么你非常依赖处理程序的顺序。
由于 header 的存在(或不存在)而丢弃消息是一个基础设施问题,并且由于您使用的是 NServiceBus V5,自定义基础设施的最佳方法是自定义消息处理管道.
这里是 the relevant documentation that covers creating a behavior and inserting it into the pipeline 但这是简短的版本:
- 您需要创建一个实现
IBehavior<IncomingContext>
的行为。所有行为共同形成一个行为链,通过调用next()
- 实现中存在的Action
方法进入下一步。 - 在行为中,检查您的 header。要停止处理消息,只需不调用
next()
而是调用context.DoNotInvokeAnyMoreHandlers()
。 - 创建一个 class 继承
RegisterStep
,它将从其构造函数中定义在管道中的何处插入您的行为。您可以在MutateIncomingTransportMessage
步骤之前注册它。 - 创建一个 class 实现
INeedInitialization
(请注意,这可能与RegisterStep
class 相同)调用busConfig.Pipeline.Register<TClassThatInheritsRegisterStep>()
.
同样,这是简短版本。查看 docs 了解完整故事和示例。
无耻外挂:这个过程在第7章Learning NServiceBus - Second Edition中也有详细描述,有例子。