设计发布者/订阅者体系结构

时间:2012-01-22 20:30:12

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

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

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

3 个答案:

答案 0 :(得分:1)

您所描述的内容可以通过纯.NET框架实现...恕我直言NServiceBus对于您所描述的内容而言“相当”......

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

关于DB的部分:

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

答案 1 :(得分:1)

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

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

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

我喜欢RabbitMQ(它有一个.NET客户端);考虑对其进行评估,看它是否符合您的需求。它不能完成NServiceBus所做的一切,但您可能不需要额外的功能。

P.S。如果有人建议使用Rhino Service Bus,请转身走开。即使是作者也承认文件是“......至少可以说。”

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

答案 2 :(得分:0)

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

我还认为使用ESB来处理通信层有助于通过将自己的两个域(发布域和使用域)分开,而不是使用自定义网络解决方案来改善解决方案的整体架构