NServiceBus MSMQ Enviar pergunta
-
05-07-2019 - |
Pergunta
Eu tenho problemas para enviar uma mensagem via NServiceBus. Eu tenho um aplicativo web ASP.Net MVC, desenvolvimento em Win7 x64, eu configurei meu web.config como
<MsmqTransportConfig InputQueue="worker" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="PricingInformation.Messages" Endpoint="worker2" />
</MessageEndpointMappings> </UnicastBusConfig>
No Application_Start I wire-se o seguinte:
var bus = NServiceBus.Configure.WithWeb()
.StructureMapBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(false)
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start();
Quando a ação Estou interessado acontece no fogo aplicativo I
public override void HandleEvent(SupplierPricingUpdatedEvent updatedEvent)
{
bus.Send(new ModelSupplierDetailsUpdatedMessage() {Id = updatedEvent.Id})
return;
}
ModelSupplierDetailsUpdatedMessage é simples classe em PricingInformation.Messages usando interface de marcador IMessage e decorado com o atributo Serializable.
As filas MSMQ são configurados, não transacional, e todos, incluindo SERVIÇO DE REDE e IIS_IUSRS tem controle total (em medidas deseperate solução de problemas)
log4net mostra o seguinte:
DEBUG NServiceBus.Utils.MsmqUtilities 14 - Checking if queue exists: worker.
DEBUG NServiceBus.Utils.MsmqUtilities 14 - Verificar se a fila existe: erro. DEBUG NServiceBus.Unicast.UnicastBus Worker.15 - Calling 'HandleBeginMessage' on NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule INFO NServiceBus.Unicast.UnicastBus Worker.15 - trabalhador inicializado. DEBUG NServiceBus.Unicast.UnicastBus Worker.15 - Calling 'HandleEndMessage' on NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule DEBUG NServiceBus.Unicast.UnicastBus 9 - Enviar mensagem PricingInformation.Messages.ModelSupplierDetailsUpdatedMessage, PricingInformation.Messages, versão = 1.0.0.0, Culture = neutral, PublicKeyToken = null com ID 2c642672-1bf1-48d4-a90f- 734e2fdd726d \ 8267 para worker2 destino.
No entanto, não importa o que eu tente, eo que eu ajustar (foram três horas para ele já) a mensagem nunca aparece na fila. Eu não consigo encontrar uma exceção e eu tenho registro de nível de depuração em tudo .. É provavelmente algo simples help
Solução
O problema é que se você configurar manualmente suas filas como não-transacional, então ele não vai funcionar. Definir a propriedade NServiceBus "IsTransactional" para false não significa que você pode trabalhar com filas não-transacionais.
Por favor, tente excluir as filas e recriando-os como transacional, ou, se você estiver usando a versão beta do v2.0, apenas deixando NServiceBus criar as filas para você.