NServiceBus警告“无法找到消息类型的处理程序”
我是NServiceBus的新手,我正在尝试开发一个发布者和单独的订阅者(我正在使用v3.2.0.0),到目前为止,它的工作正常 – 发布者和订阅者都在NServiceBus Host中运行。 我的消息全部发布正常但间歇性地不会被订阅者接收,发布者显示以下错误:
2012-09-05 14:27:37,491 [Worker.6] WARN NServiceBus.Unicast.UnicastBus [(null)] - No handlers could be found for message type: MyNamespace.MyMessage
但是,对于所有消息,此警告不会出现,因此,如果我在消息之后继续发布消息,我可能会看到其中一半显示消息,因此订阅者不会接收消息,尽管所有消息都出现在MSMQ队列中。
我承认我很难掌握这个,所以我的一些代码到目前为止可能完全是垃圾!
我按如下方式向NSB发布消息,消息输入是我定义的几种不同类型之一:
private void Publish(T message) { var myBus = Configure.Instance.Builder.Build(); myBus.Publish(message); }
发布者的EndpointConfig如下:
[EndpointName("MyQueue")] public class EndpointConfig : IConfigureThisEndpoint, AsA_Publisher, IWantCustomInitialization { /// /// Initialisation for NServiceBus. /// public void Init() { Configure.With() .DefaultBuilder() .MsmqSubscriptionStorage() .DisableTimeoutManager() .DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("MyNamespace")); } }
在订阅方,我有以下EndpointConfig:
[EndpointName("MyQueue")] public class EndPointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization { public void Init() { Configure.With() .DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("MyNamespace")); } }
使用EventMessageHandler如下:
public class EventMessageHandler : IEvent, IHandleMessages { public void Handle(IMyMessage message) { Console.WriteLine(string.Format("Subscriber 1 received EventMessage with Id {0}.", message.Id)); } }
订阅者的app.config是:
您的发布商和订阅者看起来都使用相同的端点名称。 NServiceBus使用端点名称生成队列名称,这意味着两个进程都使用相同的队列。
因此,您的发布商实际上是在发布消息,但是发布者和订阅者正在争论谁来处理它们。
当订户获胜时,您会看到您的预期行为。
当发布者获胜时,该消息没有处理程序,因此NServiceBus会显示警告。 这并不总是一个问题; 在某些情况下,您希望接收并简单地忽略消息,但此警告允许您至少知道它正在发生,并且在您的情况下,它表示该消息未被预期的应用程序处理。
因此,要修复它,只需更改端点名称即可。 MySubscriber和MyPublisher,或类似的东西。
您甚至不需要使用该属性,您只需命名实现IConfigureThisEndpoint
的类,NServiceBus将根据该名称构建端点名称。 您甚至可以使用MyProject_MyPublisher : IConfigureThisEndpoint
等下划线MyProject_MyPublisher : IConfigureThisEndpoint
和NServiceBus将下划线转换为点,因此您将获得一个“MyProject.MyPublisher”输入队列,当您有许多端点在运行时,这对于命名空间非常好。
上述就是C#学习教程:NServiceBus警告“无法找到消息类型的处理程序”分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1015728.html