发布/订阅和基于内容的订阅

本文关键字:于内容 发布 | 更新日期: 2024-09-23 01:21:36

我正处于设计一个事件驱动架构(基本发布/订阅(系统的开始阶段。 实际的工具和框架尚未选择,因此这个问题更多的是概念性的,而不是特定于技术的(尽管它将在.Net中完成(。

这种情况

的一个近乎完美的类比是金融交易系统。 想象一下,一台服务器不断接收市场数据(实时或间隔 - 这无关紧要(。 服务器将发布特定证券的定价更新。 出于这个问题的目的,假设服务器正在"监视"和发布 1000 种证券。

有 100 个客户端应用程序是此服务的订阅者。 每个客户只对正在发布的证券的一小部分感兴趣。

如果客户端收到所有 1000 个证券的消息,则必须解析它们,这显然会在客户端上创建更多的网络流量和更多的负载。

另一方面,在发布/路由时,必须在服务器端解析消息内容似乎会增加负载。

在这种类型的架构中通常如何处理?

发布/订阅和基于内容的订阅

看看 RabbitMQ 提供的一些教程

链接

特别请注意,您可以使用路由和主题将消息传递到适用的客户端。 "服务器"在这里可以简单地将消息放在队列中,客户端可以简单地根据他们订阅的路由/主题侦听某些消息。 可能还有很多其他选择,但这似乎是一条不错的路线。 RabbitMQ有一些.Net客户端可用,我对他们的产品非常满意。

我也使用过 IBM MQ 和 MSMQ,但我更喜欢 Rabbit。主要是因为它基于 AMQP,这是一个开放协议,允许我使用 .Net、Python、Java 等进行连接,而不是专有驱动程序或尝试将所有内容包装在 JMS 中。绝不是专家,所以也许其他人对您的问题有更好的见解。

祝你好运。

通常,服务器是能够执行繁重任务的更强大的机器。由于客户端只需要信息的子集,因此在我看来,服务器应该解析信息,并且只向客户端发送他们需要的信息。

分发股票报价正是导致发布/订阅地址获得专利的用例,我们现在知道并喜欢JMS和其他消息传递技术中的"主题"(专利EP0412232(。

在这种情况下,服务器将发布包含股票代码的主题的股票报价("即时报价"(。通常,您会使用主题命名空间,该命名空间提供有关符号的一些分层信息 - 例如纳斯达克。科技。硬件。亚普利。

客户端将使用主题通配符订阅一个或一组符号。发布/订阅机制将确保只分发给正确的订户。使用多播网络可以使其非常有效。

因此,为了回答您的问题,在这种情况下,发布者(服务器(正在执行对消息进行分类所需的任何逻辑,然后在相关主题上发布。订阅者不必做太多工作即可获取相关消息。

从你给出的简短描述来看,你的方案看起来非常适合OMG DDS(数据分发服务(实现。这是一个与语言无关的规范,并且有几种产品提供 C# API。

请参阅此维基百科条目以获取非常简短的介绍和参考列表。

DDS 支持许多高级数据管理功能,如强类型和内容感知数据总线、分布式状态管理和历史数据访问。其丰富的服务质量设置集允许将应用程序的许多复杂性卸载到中间件。

特别是,您描述的内容筛选要求是一项重要功能。一些可用的产品已经实现了复杂的过滤机制,这些机制可以很好地扩展,并且在网络上的流量与评估过滤器所需的 CPU 负载之间进行智能权衡。这些过滤器以 SQL 语法表示,如 SELECTWHERE 子句。

DDS 实现通常具有高度可扩展性和分散性。参与 DDS 基础设施的组件在空间和时间上都是分离的。一些 DDS 产品部署在众多任务和业务关键型系统中。

如果您有兴趣,那么我可以为您提供更多信息。我专注于DDS已有10多年了,我仍然喜欢它,我认为它是最有用的技术之一。