2010-10-09 4 views
2

Есть ли способ перехватить сообщения в 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<>).

ответ

1

NServiceBus теперь имеет широкий спектр возможностей, расширяющих возможности для обработки трубопровода сообщений см https://docs.particular.net/nservicebus/pipeline/ для более подробной информации

+0

Извините за путаю с образцом кода. Я обновил комментарии в методе Handle(). Как говорится, я ищу перехват сообщений. И, как вы знаете, NServiceBus Modules не могут использоваться для этого, потому что они переносят транспортные сообщения, а не логичны. –

+1

Ах, тогда ваши варианты должны либо создать дополнительные обработчики сообщений для того же сообщения, которое вы настраиваете для запуска до и после обычного обработчика. Другой вариант - использовать возможности перехвата вашего контейнера. (http://structuremap.net/structuremap/Interception.htm, если вы находитесь в структуре структуры). Можете ли вы рассказать о том, что вы пытаетесь сделать до и после вашей команды? –

+0

Спасибо, Андреас за эти два очка. Одна из вещей, которую я пытаюсь сделать, - отправить полученное сообщение в какую-либо другую очередь только в том случае, если оно было правильно обработано. ForwardReceivedMessagesTo отправить все сообщения. Кажется, что для моих нужд я должен использовать перехват контейнера или мой немой обработчик сообщения базы. –

1

Если вы используете NServiceBus V3, вы посмотрите на интерфейсы IMutateOutgoingMessages и IMutateIncomingMessages может.

http://support.nservicebus.com/customer/portal/articles/894155-nservicebus-message-mutators-sample

Или, если вы хотите, чтобы сообщения идут через обработчик в определенном порядке, проверить эту ссылку:

http://support.nservicebus.com/customer/portal/articles/862397-how-do-i-specify-the-order-in-which-handlers-are-invoked-