Soy nuevo en NServiceBus y estoy tratando de desarrollar un editor y un suscriptor separado (estoy usando v3.2.0.0) que, hasta ahora, está trabajando ok, tanto el publicador como el suscriptor se están ejecutando en el host NServiceBus. Mis mensajes todo publican bien, pero de forma intermitente que no son recogidas por el abonado, con el siguiente error que se muestra por el editor:NServiceBus Advertencia "No se encontraron controladores para el tipo de mensaje"
2012-09-05 14:27:37,491 [Worker.6] WARN NServiceBus.Unicast.UnicastBus [(null)] <(null)> - No handlers could be found for message type: MyNamespace.MyMessage
Esta advertencia no aparece para todos los mensajes, así que si sigo editorial mensaje tras mensaje podría ver la mitad de ellos mostrando el mensaje y, por lo tanto, no ser recogido por el suscriptor, aunque todos están apareciendo en la cola de MSMQ.
Debo admitir que estoy luchando para entender esto, por lo que algunos de mis códigos hasta ahora bien pueden ser basura completa!
estoy publicando mensajes a NSB como sigue, siendo la entrada de mensaje de uno de varios tipos diferentes he definido:
private void Publish<T>(T message)
{
var myBus = Configure.Instance.Builder.Build<IBus>();
myBus.Publish(message);
}
El EndpointConfig del editor es como sigue:
[EndpointName("MyQueue")]
public class EndpointConfig : IConfigureThisEndpoint, AsA_Publisher, IWantCustomInitialization
{
/// <summary>
/// Initialisation for NServiceBus.
/// </summary>
public void Init()
{
Configure.With()
.DefaultBuilder()
.MsmqSubscriptionStorage()
.DisableTimeoutManager()
.DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("MyNamespace"));
}
}
En el lado del suscriptor tengo el siguiente EndpointConfig:
[EndpointName("MyQueue")]
public class EndPointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
public void Init()
{
Configure.With()
.DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("MyNamespace"));
}
}
Con una EventMessageHandler de la siguiente manera: app.config
public class EventMessageHandler : IEvent, IHandleMessages<IMyMessage>
{
public void Handle(IMyMessage message)
{
Console.WriteLine(string.Format("Subscriber 1 received EventMessage with Id {0}.", message.Id));
}
}
del suscriptor es:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
<section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
</configSections>
<MessageForwardingInCaseOfFaultConfig ErrorQueue="error"/>
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="MyNamespace" Endpoint="MyQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
</configuration>
Gracias David, había asumido erróneamente que el punto final tenía que ser el mismo para señalar al suscriptor en la fila correcta, pero lo que dijiste tiene sentido.Todavía recibo el mensaje de advertencia del editor (para cada mensaje ahora), pero todos los mensajes están siendo recogidos por el suscriptor, así que estoy contento con eso. Gracias :) – RichardB
De hecho, ignore mi comentario sobre las advertencias que siguen apareciendo, borré todos los mensajes en MyQueue.Subscriptions (había 3 allí) y ahora está funcionando perfectamente. – RichardB