NServiceBus: especificando a ordem das mensagens
Estou usando o NServiceBus em seu próprio processo (entãonão usando o host genérico) e eu gostaria de ter vários manipuladores de mensagens para uma mensagem em uma ordem específica. Para o host genérico, você implementariaISpecifyMessageHandlerOrdering
, mas não sei como fazer isso ao hospedar seu próprio processo NServiceBus, pois essa interface está definida emNServiceBus.Host.exe
e não consegui encontrar outra maneira de fazer isso.
O objetivo disso é a autenticação do usuário: antes que o manipulador de mensagens real seja chamado, gostaria de autenticar o remetente da mensagem, o que aconteceria em um manipulador de mensagens diferente e mais genérico. A mensagem será de um tipo que contenha o nome de usuário e senha criptografados e / ou um ID de sessão. Este tipo será usado para quase todos os comandos enviados ao servidor (tudo, exceto o login, eu acho). Esta é uma maneira correta de fazer autenticação de usuário usando o NServiceBus?
Atualmente, ele pega o segundo manipulador, mas não na ordem certa.
Atualizar
Conforme sugerido por David, tentei criar umIMessageModule
e lendo os cabeçalhos doCurrentMessageContext
para autenticar o usuário.
Encontrei alguns problemas aqui:
A primeira vez que envio uma mensagem, obus.CurrentMessageContext
énull
. Toda vez depois disso, ele é preenchido corretamente e eu consigo ler os cabeçalhos.Chamandobus.DoNotContinueDispatchingCurrentMessageToHandlers
quando o usuário não está autenticado, não impede que os manipuladores de mensagens sejam chamados. Nem fazbus.Return(errorCode)
. Existem outras maneiras de fazer isso?