NServiceBus 警告“找不到消息类型的处理程序”

2024-01-08

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

使用事件消息处理程序如下:

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>

您的发布者和订阅者似乎使用相同的端点名称。 NServiceBus 使用端点名称来生成队列名称,因此这意味着两个进程最终使用相同的队列。

因此,实际上您的发布者正在发布消息,但随后发布者和订阅者正在争夺谁可以处理它们。

当订阅者获胜时,您会看到您的预期行为。

当发布者获胜时,没有该消息的处理程序,因此 NServiceBus 会显示警告。这并不总是一个问题;在某些情况下,您希望接收并简单地忽略消息,但此警告至少可以让您知道它正在发生,并且在您的情况下,它表明该消息未被预期的应用程序处理。

因此,要修复它,只需更改端点名称即可。 MySubscriber 和 MyPublisher 或类似的东西。

您甚至不需要使用该属性,您只需命名实现的类即可IConfigureThisEndpointNServiceBus 将根据该名称构造端点名称。您甚至可以使用下划线,例如MyProject_MyPublisher : IConfigureThisEndpointNServiceBus 会将下划线变成点,因此您将获得“MyProject.MyPublisher”的输入队列,当您有许多端点运行时,这对于命名空间来说非常有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NServiceBus 警告“找不到消息类型的处理程序” 的相关文章

随机推荐

  • jQuery 单击停止传播

    我有一个简单的设置 一个表格 其单元格内有复选框 我有两个事件 一个事件响应单击复选框 另一个事件响应单击 tr 元素 当我单击复选框时 我不希望触发表行事件 我试过了event stopPropagation and return fal
  • 文本框的实时绑定属性更改[重复]

    这个问题在这里已经有答案了 我有一个TextBox控件绑定到我的视图模型中的属性 当前行为的工作方式是视图模型只会收到通知 其中的文本TextBox控件失去焦点后进行修改 每当TextBox实时改变状态 它附加到我的视图模型中的一个属性 用
  • 如何将键值对附加到 iPhone 上的 UIView?

    当我开始 iPhone 开发时 我在某处读到可以将键值对附加到 UIView 我知道所有 UIView 都可以用作字典来存储您可能想要附加到它们的任何数据 以防止不必要的子类化 然而 我到处寻找参考 并尝试自己实现该行为 但徒劳无功 我尝试
  • PowerMockito - 如何将whenNew()与类型化列表一起使用?

    我希望 PowerMockito 返回我的空数组列表Foos when new ArrayList
  • 根据 UIBezierPath 移动 UIView [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 I ve a UI贝塞尔路径画这个 我希望红点在蓝色路径上无限移动 从右到左 从左到右 我怎样才能做到这一点 您可以使用CAKeyFr
  • 我应该选择 IEnumerable 还是数组? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我从事的许多项目中 每当我必须返回只读集合时 我都会使用IEnumerable
  • HTML 表单提交按钮的字体大小无法更改

    如何增加提交按钮的字体大小 特别是在 Chrome 中 它太小并且文本看起来被压扁 工作小提琴 http jsfiddle net xhf4bLnd body input font size 30px 我知道有 webkit appeara
  • 获取 WKWebView 中静态页面的最终渲染高度

    在我的应用程序中 我使用的是WKWebView它加载带有静态内容的网页 我想知道 的高度contentSize一旦网页完全呈现在WKWebView 所以我想我可以使用webView didFinishNavigation 代表 import
  • Google Apps 脚本最大执行时间问题

    我是编码新手 最近我创建了一个 Google 脚本 基于其他两个脚本 它执行以下操作 按主题行搜索 Gmail 草稿 获取 Gmail 草稿并将其用作模板来创建带有唯一附件的多个草稿 创建草稿后添加确认短语 这是代码 Change thes
  • 读取 Excel 并将其显示在表格视图上。使用二维数组或列表列表填充 TableView

    我的目标是读取 Excel 我可以通过 Apache POI 读取 并在 TableView JavaFX 上显示 Excel 我能够在上显示列名称TableView 但无法在这些列中填充数据 对于我发现的许多可用资源 有一个一般示例 其中
  • 在 Python 中向 Minecraft 服务器发送登录数据包不起作用

    我有以下 Python 脚本 它的作用是尝试连接到 MineCraft 服务器 首先发送 握手 然后发送登录请求 协议规范可以在这里找到 http wiki vg 协议 http wiki vg Protocol 无论如何 python 脚
  • Python多重处理:AttributeError:'Test'对象没有属性'get_type'

    简短的简短版本 我在并行化使用实例方法的代码时遇到问题 更长的版本 此 python 代码产生错误 Error Traceback most recent call last File Users gilzellner dev git 3
  • IE8 不动态应用 css 显示

    我正在尝试开发一个在给定值上隐藏其列的表 我正在使用中讨论的解决方案另一个问题 https stackoverflow com questions 2858339 show hide html table columns using css
  • Kotlin 和 WebSockets [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在制作一个小型服务器端应用程序 它将通过 WebSockets 与浏览器通信 并正在考虑用 Kotl
  • Rails 从 6.1 升级到 7.0 后忽略默认日期格式

    我们的应用程序之前将默认日期格式定义为DD MM YYYY in config application rb像这样 Date DATE FORMATS default d m Y 这在 Rails 6 1 中按预期工作 但升级到 Rails
  • 如何给Redis设置密码?

    我正在本地计算机上使用 redis 因此我实际上不需要设置密码来使用我的 php 客户端连接到服务器 我使用 predis 作为客户端 但是 我正在将我的应用程序移动到实时服务器 因此我想设置一个密码来连接到我的 redis 服务器 我有几
  • 仅在 WooCommerce 前端显示基于作者用户角色的产品

    我有一个供应商市场 我只想显示由特定作者用户角色 供应商 创建的产品 澄清一下 我并不是想改变用户角色看到的内容 仅尝试显示供应商创建的产品 I found 隐藏产品仅显示分配给 woocommerce 中某些用户角色的产品 https s
  • Fargate 与 Lambda,何时使用哪个?

    我对整个无服务器领域还很陌生 并且正在尝试了解何时使用 Fargate 与 Lambda 我知道 Fargate 是 ECS 的无服务器子集 Lambda 也是无服务器的 但由事件驱动 但我希望能够向其他熟悉容器但不太了解 AWS 和无服务
  • GUI 应用程序的跨平台 C 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 免费 易于学习 使用 用于 GUI 应用程序的跨平台 C 库 我在寻找 Qt 吗 额外问题 我可以在 M
  • NServiceBus 警告“找不到消息类型的处理程序”

    我是 NServiceBus 的新手 正在尝试开发一个发布者和单独的订阅者 我使用的是 v3 2 0 0 到目前为止 它工作正常 发布者和订阅者都在 NServiceBus 主机中运行 我的消息全部发布正常 但订阅者间歇性地无法接收它们 发