问题标签 [nservicebus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
553 浏览

.net - ESB 与自定义解决方案

我正在调查是否为新项目使用 nServicebus 或自定义解决方案。基本上我想创建一个“消息层”,它将接收来自各种来源的消息,处理这些消息,然后将它们发送到某个目的地。在大多数情况下,我检索并发送消息。在少数情况下,消息通过 Web 服务到达。我想知道 nServicebus 是否适合这种类型的项目,或者我应该创建一些通用接口并使用数据库作为我的消息队列。

一个例子是我需要通过 FTP 检索文件,解密这些文件,然后通过 COM 调用 (ActiveX dll) 处理它们。这个过程可能会在不同的点上失败。我希望能够指定何时必须重新检索、重新处理或重新发送消息。

0 投票
1 回答
1096 浏览

workflow - 带有分销商的 NServiceBus 管道

我正在使用 NServiceBus 构建一个处理管道,但我在配置分发服务器时遇到了问题,以便使流程中的每个步骤都具有可扩展性。这里有一些信息:

  • 管道将有一个主进程,对 WorkItem 说“好的,该开始了”,然后它将启动一个类似流程图的进程。
  • 流程图中的每个步骤都可能在计算上很昂贵,因此我希望能够扩展每个步骤。这告诉我每个步骤都需要一个 Distributor。
  • 我希望以后能够将其他活动与事件挂钩。这告诉我完成后我需要 Publish() 消息,而不是 Send() 它们。
  • 流程可能需要根据条件进行分支。这告诉我一个进程必须能够发布不止一种类型的消息。
  • 一个进程可能需要加入分叉。我想我应该为此使用 Sagas。

希望这些假设是好的,否则我遇到的麻烦比我想象的要多。

为了简单起见,让我们忘记分叉或加入,考虑一个简单的管道,步骤 A 后跟步骤 B,并以步骤 C 结束。每个步骤都有自己的分发器,并且可以有许多节点处理消息。

  • NodeA worker 包含一个 IHandleMessages 处理器,并发布 EventA
  • NodeB worker 包含一个 IHandleMessages 处理器,并发布 Event B
  • NodeC worker 包含一个 IHandleMessages 处理器,然后管道就完成了。

以下是配置文件的相关部分,其中#表示worker的数量,(即有输入队列NodeA.1和NodeA.2):

以下是分销商配置的相关部分:

我正在使用每个节点的 2 个实例进行测试,问题似乎出现在节点 B 的中间。基本上可能发生两件事:

  1. Node B 的两个实例都报告它正在订阅 EventA,并且 NodeC.Distrib.Data@MYCOMPUTER 正在订阅 Node B 发布的 EventB。在这种情况下,一切都很好。
  2. Node B 的两个实例都报告它正在订阅 EventA,但是,一个工作人员说 NodeC.Distrib.Data@MYCOMPUTER 正在订阅 TWICE,而另一个工作人员没有提到它。

在第二种情况下,它似乎只受分发者路由订阅消息的方式控制,如果“overachiever”节点处理一个 EventA,那么一切都很好。如果“成绩不佳者”处理 EventA,则 EventB 的发布没有订阅者并且工作流终止。

所以,我的问题:

  1. 这种设置可以吗?
  2. 配置是否正确?除了简单的一级发布者/2-worker 设置之外,很难找到任何关于分发者的配置示例。
  3. 让一个中央代理进程来执行所有非计算密集型的交通警察操作,并且仅在任务长时间运行且必须进行负载平衡时才将消息发送到分发器后面的进程是否更有意义?
    • 然后负载平衡的节点可以简单地回复中央代理,这似乎更容易。
    • 另一方面,这似乎与 NServiceBus 的权力下放不符。
    • 如果这是答案,并且长时间运行的流程的 done 事件是一个回复,那么您如何保留 Publish 以启用以后对已发布事件的可扩展性?
0 投票
2 回答
9237 浏览

.net - Enterprise Service Bus、.NET Service Bus、NServiceBus 和总线上的轮子

企业服务总线(ESB)、.NET 服务总线(Windows Azure AppFabric 服务总线)、NServiceBus、RhinoServiceBus、MassTransit 等。

我试图了解这些技术的共同点或不共同点。

我今天早些时候参加了 Juval Löwy 关于 .NET 服务总线的演讲,他说 .NET 服务总线可以用作 ESB 的穷人版本,所以我认为这意味着 .NET 服务总线不是ESB,其他任何一个都是真正的 ESB 吗?

如果其他任何一个是真正的 ESB,与 .NET 服务总线相比,什么会使它们成为真正的 ESB?

0 投票
3 回答
989 浏览

object - NServiceBus 发送数据问题

我正在使用 NServices 发送 MyMusicMessage 类的对象作为打击:

当 MusicBytes 的大小在 200k 左右时,可以很好地发送。

但是当大小超过 300K 时,就会出现“MessageQueueException”。

NServiceBus 中的对象大小是否有限制?

谢谢。

0 投票
3 回答
507 浏览

.net - 关于设计和构建用于跟踪车辆的分布式应用程序的建议

我正在研究跟踪车辆的应用程序。将有大约 10,000 辆或更多车辆。每个将在每分钟发送约 250 个字节。数据包含 GPS 位置和来自 CAN 总线的所有内容(我们可以从车载计算机和仪表板读取的所有数据)。数据通过 GSM/GPRS 发送(使用 UDP 协议)。每天使用此数据的估计行数约为 2000k。

我看到有 3 个主要块(块-> 表示主要模块)。

1. 多线程套接字服务器 (MSS) - 我有。MSS 将接收到的数据存储到队列中(使用 NServiceBus)。

2. 规则处理器服务器(RPS)——这是这个系统的核心。该块负责解析接收到的数据,存储在数据库中,处理规则,向通知服务器发送消息(这将发送电子邮件/短信文本)。

规则示例。正如我之前所说,接收到的字节会有关于当前速度的信息。当速度高于 120 时:在 Web 应用程序中为指定用户显示警报、发送电子邮件、发送短信。

(同一台机器上可以有多个 RPS 实例)。

3. Web 应用程序 - 允许用户报告和定义规则、监控警报等。

我正在寻找如何设计 RPS 和 Web 应用程序之间的通信的建议。

一些问题:

  • Web 应用程序和 RPS 应该有独立的数据库还是一个中央数据库就足够了?

  • 我在 Web 应用程序中有一个域模型。如果会有一个中央数据库,那么我可以在 RPS 上使用相同的模型(对象)吗?那么,如何将更改后的规则发送到 RPS?

我尝试尽可能多地解耦这些块。我计划为每个客户端创建不同的应用程序实例(每个客户端都有单独的数据库)。一位客户将拥有 10,000 辆汽车,其他客户只有 100 辆汽车。

0 投票
1 回答
1189 浏览

linq-to-sql - 带有 nservicebus 表锁定问题的 linq to sql

我正在使用 NServiceBus 构建一个系统,而我的 DataLayer 正在使用 Linq 2 SQL。

该系统由 2 个服务组成。

Service1 从 NSB 接收消息。它将在我的数据库中查询 Table1 并将记录插入 Table1 如果满足某个条件,则将新的 NSB 消息发送到第二个服务

当 Service2 接收到来自 Service1 的消息并执行其他一些与数据库无关的工作时,它也会更新 Table1 中的记录。Service2 是一个长时间运行的进程。

我遇到的问题是 Service2 更新 Table1 中的记录时,该表被锁定。在 Service2 完成所有处理之前,锁似乎就位。即我的数据上下文被释放后,锁没有被释放。

这会导致 Service1 中的查询超时。一旦 Service2 完成处理,Service1 将再次恢复处理而不会出现问题。

因此,例如 Service1 代码可能如下所示:

service2 中的代码可能如下所示:

我不明白为什么在Service2中处理datacontext时没有释放锁。

为了解决我一直在打电话的问题:

这行得通,但我不喜欢使用它。我想正确解决这个问题。

以前有没有人遇到过这种问题,有人知道如何解决吗?为什么数据上下文被释放后锁没有被释放?

提前致谢。

ps 很抱歉这篇文章太长了。

编辑:

在现实世界(ish)的情况下看这个,比如运输:

service1 将 crate 记录添加到数据库中。如果存在特定数量或板条箱记录,则将板条箱添加到容器记录(如果不存在容器记录,则创建一个),然后创建运输记录并关闭所有容器并分配给运输记录。

然后调用 service2 处理运输记录。对 service2 的调用是 Bus.Send 调用,但可能是传奇的一部分。service2 将更新每个 crate 记录,它被分配到哪个船。然后处理一些其他的运输指令。当 service2 正在处理时,可能会收到更多的 crate 用于下一次运输,但就目前而言,在 service2 完成运输处理之前,它们不能分配到容器中。

0 投票
3 回答
37826 浏览

.net - 什么是服务总线,我什么时候需要?

我听说过有关NServiceBus的讨论,但我还没有真正理解它是什么。他们声称是“.net 最流行的开源服务总线”。

什么是服务总线,我什么时候需要?

0 投票
1 回答
2356 浏览

asp.net - 在 Web 应用程序 Application_Start 方法中初始化 NServiceBus 时出现 NullReferenceException

我正在运行 NServiceBus 的 2.0 RTM,当我的 MessageModule 将 CurrentSessionContext 绑定到我的 NHibernate sessionfactory 时,我得到了 NullReferenceException。

在我的 Application_Start 中,我调用以下方法:

当总线启动时,我的消息模块以以下内容开始:

在查看我的日志时,我们在调用 bind 方法时记录了以下错误:

显然,访问 HttpContext 存在一些问题。这个配置 NServiceBus 的调用是否应该在生命周期中比 Application_Start 更晚发生?或者是否有其他人用来让处理程序在 Asp.NET Web 应用程序中工作的另一种解决方法?

谢谢,史蒂夫

0 投票
1 回答
821 浏览

c# - 使用 NServiceBus 进行非常简单的错误处理

大家好,这是一个简单的场景

  • NServiceBus 客户端/服务器设置。
  • “消息”是我编写的自定义类。

客户端发送请求消息。服务器接收消息,服务器执行以下操作:

然后什么都没有。客户端永远不会收到响应。

例外:

通过浏览 log4net NServiceBus 日志,我发现了一个异常,事实证明我的海关类“用户”没有标记为Serializable

好的,如何“抛出”或“处理”这种错误?

NServiceBus 似乎提倡不处理错误的想法,但在这种情况下,很明显看到某种“抛出”会节省大量时间。

我如何处理此类异常,它们发生在哪里,它们去了哪里?

0 投票
1 回答
187 浏览

msmq - 机器位置的 NServicebus DNS 条目

我正在尝试为我的 NServicebus 队列端点使用 DNS 条目,但没有发送任何消息。当我输入计算机名称或 IP 地址时,它工作正常。我可以 ping 记录并正确解析,所以我想知道是否可以使用 DNS 记录?这是我的配置:

谢谢