Есть ли способ перехватить сообщения в NServiceBus?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<>
).
Извините за путаю с образцом кода. Я обновил комментарии в методе Handle(). Как говорится, я ищу перехват сообщений. И, как вы знаете, NServiceBus Modules не могут использоваться для этого, потому что они переносят транспортные сообщения, а не логичны. –
Ах, тогда ваши варианты должны либо создать дополнительные обработчики сообщений для того же сообщения, которое вы настраиваете для запуска до и после обычного обработчика. Другой вариант - использовать возможности перехвата вашего контейнера. (http://structuremap.net/structuremap/Interception.htm, если вы находитесь в структуре структуры). Можете ли вы рассказать о том, что вы пытаетесь сделать до и после вашей команды? –
Спасибо, Андреас за эти два очка. Одна из вещей, которую я пытаюсь сделать, - отправить полученное сообщение в какую-либо другую очередь только в том случае, если оно было правильно обработано. ForwardReceivedMessagesTo отправить все сообщения. Кажется, что для моих нужд я должен использовать перехват контейнера или мой немой обработчик сообщения базы. –