有没有办法拦截NServiceBus中的消息?
从现在起,我可以通过引入这样的基本消息处理程序手动完成:
public abstract class MessageHandler<T> : IHandleMessages<T>
where T : IMessage
{
public IBus Bus { get; set; }
protected abstract void HandleCommand(T command);
public void Handle(T command)
{
// perform some logic on *command* before
HandleCommand(command);
// perform some logic on *command* after
}
}
用法:
public class ConcreteMessageHandler : MessageHandler<ConcreteMessage>
{
protected override void HandleCommand(ConcreteMessage message)
{
//handle command
}
}
但是这样做我失去了订阅多条消息的能力(因为我不能从多个MessageHandler<>
类继承)。
答案 0 :(得分:1)
NServiceBus现在为消息处理管道提供了广泛的可扩展性选项,请参阅https://docs.particular.net/nservicebus/pipeline/了解更多详情
答案 1 :(得分:1)
如果您使用的是NServiceBus V3,则可以查看IMutateOutgoingMessages和IMutateIncomingMessages接口。
http://support.nservicebus.com/customer/portal/articles/894155-nservicebus-message-mutators-sample
或者,如果您希望消息按特定顺序通过处理程序,请查看以下链接: