NServiceBus教程-消息传递与处理

时间:2021-10-28 06:04:57

nservicebus”的容错默认”设计的一部分,基础设施管理事务自动所以你不需要记住所有的线程和状态管理要素配置。

客户端和服务器

理想情况下,服务器代码处理消息事务,但它往往不是客户所需,特别是桌面应用程序。这是一个之间的差异asa_clientasa_server设置的通用主机在nservicebus。

指定交易代码

如果你不使用通用的主机,您可以指定当前端点应处理消息事务设置istransactional(真的)。msmqtransport()。(版本3)或usetransport < >(MSMQ)。(版本4)。

覆盖系统。交易的默认超时10分钟,按照描述的步骤这篇博客

分布式事务处理协调器

在Windows中,有一个操作系统级别的服务管理需要跨多个资源的交易直接转矩控制,如队列和数据库。这项服务并不总是正确的配置可能需要检修。下载一个工具叫dtcping帮助你发现如果一台机器可以访问在远程机的直接转矩控制。这个工具看起来像这样。

NServiceBus教程-消息传递与处理

如果你得到一个错误指的是RPC终结点映射器,在命令提示符下,运行组件服务。你应该看到屏幕下方的组件服务。

NServiceBus教程-消息传递与处理

打开一些端口,通过右键单击“我的电脑”,将“默认协议”选项卡。从那里,选择“面向连接的TCP / IP”并单击“属性”按钮。在“性能COM网络服务”对话框中,检查端口范围包括“5000-6000”,如图所示:

NServiceBus教程-消息传递与处理

如果端口列表为空,点击“添加……”按钮并输入 “5000-6000”对话框。你的屏幕看起来应该像上面的图片。你可能做不到1000个开放口岸,但这取决于机器的数量在DTC互相连接。

单击确定后,返回组件服务的屏幕,浏览到“本地DTC”节点的分布式事务协调器的文件夹,在右键单击,选择“属性”。在打开的对话框中,选择“安全”选项卡,如图所示:

NServiceBus教程-消息传递与处理

确保你看到的性能与上述相同,重新启动计算机。

如果dtcping不工作,检查所需的防火墙中的端口是开放的。考虑删除防火墙中的例外和补充DTC再次确认。

如果给你一个寻找dtcping名称消息但没有达到,通过运行“ping计算机名”在命令提示符下做一个简单的平。如果机器不能达到的平,这可能是你有一个DNS的问题,可能需要您的网络管理员的帮助。

确保你完成所有的步骤,不只是连接到数据库服务器,而且在数据库服务器和。

最后,检查使用中的服务器的TCP端口,确保每一个不同的端口配置为双向通信。在这一点上,你应该能够运行事务nservicebus端点。

消息处理循环

信息如下在nservicebus加工:

  1. 队列是偷看,看看有没有消息。
  2. 如果是这样,一个分布式事务开始。
  3. 队列接收消息,再联系。这是因为多个线程可能从相同的消息。队列可以确保只有一个线程可以真正得到一个给定的消息。
  4. 如果线程能够得到它,nservicebus尝试反序列化消息。如果失败,消息移动到配置错误队列和事务提交。
  5. 一个成功的反序列化后,所有的基础设施和应用消息nservicebus调用模块和处理程序。在这一步异常导致事务回滚和消息返回到输入队列。

    • 这是“maxretries”可配置次数。
    • 在那之后,消息传来二级重试(SLR)。
    • 如果在单反的错误仍然存在,该消息将被移动到配置错误队列。

在这种方式中,即使在各种故障情况下,如应用服务器重新启动的消息或数据库死锁中,信息不会丢失。

自动重试机制通常能够从暂时的问题恢复。如果这是不可能的,把消息传递到单反相机决定下一步做什么。

解决更多的永久性错误

在永久的错误会影响系统的情况下,尽管他们的多样性的解决方案是相同的,nservicebus。在描述它,让我们看到这些情况的例子:

  • 数据库是。
  • 一个内部或外部Web服务是下。
  • 系统升级不小心,打破向后兼容性。

在以上所有,行政行为是必要的,从一些简单如建立数据库或Web服务,到更复杂的动作像恢复到以前的系统版本。

单反相机也有助于固定的错误决议

这消息本身并没有错。它可能包含不迷失在这些条件下,有价值的信息。因此,管理员完成解决问题后,他们会回复邮件来自队列。幸运的是,有一个工具nservicebus确实。

returntosourcequeue.exe

NServiceBus教程-消息传递与处理

你可以在你的下载目录nservicebus“工具”,找到这个工具。

管理员提供的错误队列他们想要使用,或者指定一个特定的消息ID返回到它的源队列,或所有返回给定误差每个排队到各自的源队列中的所有消息。