NServiceBus-如何使用NSB处理来自大量设备的事件

NServiceBus-如何使用NSB处理来自大量设备的事件,nservicebus,Nservicebus,抱歉,如果这个问题有点幼稚 我们有大量设备(>100000)向主机发送事件,我们希望不同的客户应用程序能够从特定设备接收事件 一个具体的例子是温度读数,一个客户应用程序可能需要一个地理区域内所有设备的读数,而另一个客户应用程序可能需要安装在特定设备(如冷冻食品区域)但在多个地理区域内的所有设备的读数 然而,另一个客户应用程序只对他们制造的设备感兴趣 i、 e.这些将是重叠的设备“集合” 也许这只是“物联网”的一个例子 我相信NSB中的pub/sub方法使用“消息类型”来标识目标订阅,但我怀疑这些

抱歉,如果这个问题有点幼稚

我们有大量设备(>100000)向主机发送事件,我们希望不同的客户应用程序能够从特定设备接收事件

一个具体的例子是温度读数,一个客户应用程序可能需要一个地理区域内所有设备的读数,而另一个客户应用程序可能需要安装在特定设备(如冷冻食品区域)但在多个地理区域内的所有设备的读数 然而,另一个客户应用程序只对他们制造的设备感兴趣 i、 e.这些将是重叠的设备“集合”

也许这只是“物联网”的一个例子

我相信NSB中的pub/sub方法使用“消息类型”来标识目标订阅,但我怀疑这些消息都是相同的类型

我相信,假设我自己处理路由,我可以使用bus.send

但这是国家安全局的正确方式吗

是否有任何文章或文档说明这种类型的体系结构

注意:我们目前有一个使用持久性MSMQ和“手动”路由解决方案的解决方案(实施不再合适-见下文)-因此有一些压力需要“改进”该解决方案,而不是采用更好的解决方案,如NSB

为什么不再合适了原因很多,但主要是实现按类型路由消息(目的是让不同的服务使用不同的类型) 但我们也允许按“组”(一组设备)进行路由,这就是它目前的使用方式-但这是一种手动配置,现在我们有数千台设备,以及大量需要自己的“组”设备的客户应用程序(100+),但现在他们也想将他们的一些设备“共享”给其他客户应用程序 它是使用MSMQ编写的自定义代码(和Dotnet1.0-这是我们的第一个dotnet项目!-所以做得不太差) 但当我们打算重写这篇文章时,看看NSB是有意义的

我想问题的一部分是我没有找到一个适合我们正在尝试的“模式”——因此很难解释它是什么
但是,考虑到“物联网”的出现,我希望这是一个比实际情况更常见的问题。

这听起来像是一个班级发布/订阅类型的场景。如果您开始向不同的消费者显示类似的数据,那么最好让消费者订阅所有消息,并让消费者删除它不关心的消息。配置由消费者负责


有了NSB,您可以通过两种方式实现这一点,要么使用不同的消息类型,让每个消费者只订阅其关心的消息,要么让每个消费者接收所有消息,只处理其关心的消息。后者的缺点是它会产生更多的流量,但这在您的情况下可能不是问题。

以前构建过此类系统,您需要考虑的一点是,用户正在查看的任何UI都无法足够快地刷新,以反映真实世界的变化速度

设计需要依赖于内存中的模型,该模型随着真实世界的变化而更新。从这里开始,最简单的解决方案是让UI线程轮询该模型,然后呈现当前状态

如果用户希望能够更改他们在运行时使用的过滤器,则需要让客户端仍保留所有信息,以便您有足够的历史记录供用户查看。为清楚起见,这意味着客户端不会根据用户当前查看的内容过滤数据-它需要接收和处理所有内容

按照您所说的速率(1M+msgs/min=15k msgs/s),您不会希望在每个客户机上都处理这些数据。相反,您需要某种通用操作图片服务器(COPS),它将聚合来自所有设备的数据

如果你需要支持的客户数量不是那么多,你可以让他们去警察局投票——这将是最简单的


在任何情况下,如果使用或不使用NServiceBus,您都希望避免事务性/持久性消息传递,以达到您所说的速率。我认为,即使使用非持久性消息,MSMQ也无法为您提供足够高的伸缩性—RabbitMQ可能是您更好的选择

如果您需要在更高级别的实体上执行任何类型的逻辑,这些实体的状态是由来自多个传感器的数据构建的,那么事情就会变得更复杂。不久前我写了一篇关于这一点的文章:


希望这会有所帮助。

您能否进一步说明实施不再合适的原因?这将有助于定义方法。编辑原始帖子以扩展现有解决方案听起来您需要订阅级别的基于内容的路由。有一个
ippublishmessages
接口,您可以提供一个自定义实现,根据内容删除订阅者。我不是NServiceBus专家,因此可能有人会指出这样的解决方案是否可行/有用。我目前在想,如果我必须根据特定订阅者的内容实施某种形式的路由,那么我可能会改用“点对点”的消息传递方式——我不知道在这种情况下,酒吧/酒吧会给我带来什么好处Hi Adam,谢谢你的回应后者的缺点是它会产生更多的流量,但在你的情况下,这可能不是问题。不幸的是,我认为这将是我们期望每台设备每分钟发送一条消息,因此我们目前每分钟接收100000多条消息,如果我们假设有100个订户,那么这将是一个巨大的流量,目标是“在任何情况下,如果