NServiceBus警告“不处理程序无法找到消息类型”(NServiceBus Warning “

2019-09-22 04:33发布

我是新来的NServiceBus,我试图建立一个出版商和独立用户(我使用v3.2.0.0)的,到目前为止,是那种好工作 - 无论是出版商和用户在NServiceBus主机正在运行。 我的所有邮件发布确定,但间歇它们不会被用户捞起,用由出版商显示以下错误:

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

此警告不会出现所有的消息了,所以如果我继续发布消息消息后,我可能会看到其中的一半显示消息,因此没有被用户拾起,尽管所有人都出现在MSMQ队列中。

我承认,我努力让与此交手,所以我的一些代码到目前为止很可能是完整的垃圾!

我发布消息到NSB如下,与所述消息输入是我已经定义几种不同类型中的一种:

private void Publish<T>(T message)
{
    var myBus = Configure.Instance.Builder.Build<IBus>();
    myBus.Publish(message);
}

出版商的EndpointConfig如下:

[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"));
    }
}

在用户侧,我有以下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<IMyMessage>
{
    public void Handle(IMyMessage message)
    {
        Console.WriteLine(string.Format("Subscriber 1 received EventMessage with Id {0}.", message.Id));
    }
}

用户的的app.config是:

<?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>

Answer 1:

它看起来像您正在使用您的发布者和订阅者都相同的端点名称。 NServiceBus使用端点名称来生成队列名称,因此,这意味着,这两个进程拉闸使用同一队列。

因此,在影响您的发布者发布消息,但随后发布者和用户的争夺谁可以处理它们。

当用户赢了,你看你预期的行为。

当出版商获胜,对于该消息没有处理程序,因此NServiceBus显示警告。 这并不总是一个问题; 有一定的情况下,您会想接受,只要忽略的消息,但这样的警告可以让你至少知道它的发生,并在你的情况下,它是说没有被预期的应用处理的消息。

因此,要解决这个问题,只需更改端点名称。 MySubscriber和MyPublisher,或者类似的东西。

你甚至都不需要使用属性,你可以命名一个实现类IConfigureThisEndpoint和NServiceBus将构建基于端点名称。 你甚至可以用下划线如MyProject_MyPublisher : IConfigureThisEndpoint和NServiceBus将会把下划线为点,所以你会得到“MyProject.MyPublisher”这是非常好的了命名空间,当你有很多终点跑来跑去的输入队列。



文章来源: NServiceBus Warning “No handlers could be found for message type”