【问题标题】:Designing a publisher/subscriber architecture设计发布者/订阅者架构
【发布时间】:2012-01-22 20:30:11
【问题描述】:

我想知道是否可以根据以下要求获得一些想法: - 一种服务,它轮询多个数据库上的日志表以进行更改,然后将通知发布到在各种 pc 上运行的任意数量的轻量级客户端 - 发送的消息会很小,并且可能仅包含有关事件时间戳和事件性质的数据。 -我希望桌面客户端在 PC 上的安装非常容易,因此不希望它过度依赖 .net 4 框架之外的第三方组件。

到目前为止,这是我自己的想法: 我玩过 NServicebus,这似乎符合我想要的要求。 我正在考虑使用某种异步方法在发布者中轮询要轮询的每个数据库,然后创建订阅者(客户端)将收到的消息。 Nservicebus 是否太多了?,目前我不要求客户只听和接收消息,这样他们就不会真正发回任何东西。 我意识到,如果我要安装 NServicebus,那么 MSMQ 和其他位也需要安装在每个客户端上。 所以希望这些不是资源匮乏。 我做了一些阅读并下载了一些代码来玩,但在这方面并没有太多经验,所以任何建议都是有用的。

【问题讨论】:

  • 你看过使用 netTcpBinding 的 WCF 回调吗?每个客户都必须注册该服务,但它相对容易实施、轻量级且不需要第三方软件。
  • @Lloyd,不正确。我之前确实研究过全双工服务,但我猜它应该也是我应该看的东西

标签: c# .net windows-services nservicebus publish-subscribe


【解决方案1】:

您所描述的可以使用纯 .NET 框架来实现...恕我直言,NServiceBus 对于您所描述的内容来说“太多了”...

要自己实现这种机制,您可以使用 UDP 广播...虽然 UDP 不提供传送保证,但它通常在 LAN 中是可靠的...您可能需要注意的唯一方面是拥有防火墙规则允许您的 UDP 端口...

至于有数据库的部分:

你没有说这些是什么类型的 DB...但是一些 DB(如 SQL Server 2008、Oracle 等)带有一个事件/通知机制,这会使轮询部分过时...

【讨论】:

  • 感谢您的回复,我打算连接SQL Server 2008 dbs。但是我无法保证我能够在它们上使用服务代理之类的功能,唯一可以确定的是我将拥有对表的读取权限。
  • 另外,防火墙问题也可能是一个因素,因为我可能不得不在假设下工作,我将无法更改任何防火墙设置。但是,这也可能会影响 msmq。
  • @Rubans 如果您无法更改任何防火墙设置,那么您需要使用任何可用的连接选项......所以问题变成了运行时可用的连接(在决定技术之前) ) ?
【解决方案2】:

NServiceBus 的免费许可证仅允许具有 4 个或更少 CPU 内核的单台机器用于生产用途。这意味着您不能拥有具有此许可证的分布式模型*。根据您的需要,您可能需要购买商业许可证。

NServiceBus 是一个非常自以为是的框架。如果你正在考虑它,我建议你做一个峰值,看看实现你需要的功能有多难。您可能会发现它要么非常简单(您正在以 NServiceBus 方式进行),要么非常令人沮丧。

MassTransit 不错,尽管文档不完整并且存在一些错误。它还设计为仅在防火墙内进行通信。

我喜欢RabbitMQ(它有一个.NET 客户端);考虑评估它是否满足您的需求。它并不能完成 NServiceBus 所做的所有事情,但您可能不需要额外的功能。

附:如果有人建议 Rhino 服务巴士,请转身走开。甚至作者也承认文档“......至少可以说是多余的”。

*免责声明 - 我不是律师。

【讨论】:

  • 是的,关于我确实阅读过的许可证的有效观点,但我猜出于某种原因,我认为我的客户将不受此限制。当然,如果您只能在一台机器上使用 install nservicebus 而不用于商业用途,那么它在不付费的分布式架构中真的不可用吗?另外,感谢有关 RabbitMQ 的链接,听说过但还没有玩过。
【解决方案3】:

我个人认为这是某种 ESB 的情况。使用已建立的 ESB(如 NserviceBus 使用的 MSMQ)所获得的好处是,您可以获得消息持久性之类的东西。

我还认为,与使用自定义网络解决方案相比,使用 ESB 处理通信层有助于通过将两个域(发布域和消费域)分离得更多,从而改进解决方案的整体架构

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2016-12-14
    • 2021-07-28
    相关资源
    最近更新 更多