设计发布者/订阅者体系结构
本文关键字:体系结构 发布者 | 更新日期: 2023-09-27 18:21:09
我想知道是否可以根据以下要求获得一些想法:-一种服务,它轮询多个数据库上的日志表以获取更改,然后将通知发布到运行在各种PC上的任意数量的轻量级客户端-发送的消息会很小,并且只包含关于事件的时间戳和事件性质的数据。-我希望桌面客户端在电脑上的安装非常简单,所以不希望它过于依赖除.net 4框架之外的第三方组件。
到目前为止,以下是我自己的想法:我玩过NServicebus,这似乎符合我的要求。我想使用某种异步方法轮询发布服务器中要轮询的每个数据库,然后创建订阅者(客户端)将收到的消息。Nservicebus太贵了吗?,目前,我不要求客户只听并接收消息,这样他们就不会真正发回任何信息。我意识到,如果我要安装NServicebus,那么MSMQ和其他位也需要安装在每个客户端上。因此,希望这些不是资源匮乏。我读了一些书,下载了一些代码,但在这方面没有太多经验,所以任何建议都是有用的。
您所描述的可以用纯.NET框架实现。。。IMHO NServiceBus对于你所描述的来说"太多了"。。。
要自己实现这样的机制,您可以使用UDP广播。。。虽然UDP不能保证传输,但它在局域网中通常是可靠的。。。您可能需要注意的唯一方面是有一个防火墙规则允许您的UDP端口…
对于带有DB的零件:
你没有说那是什么类型的数据库。。。但有些数据库(如SQL Server 2008、Oracle等)带有事件/通知机制,这会使轮询部分过时。。。
NServiceBus的免费许可证只允许一台CPU核数不超过4的机器用于生产。这意味着您不能拥有具有此许可证*的分布式模型。根据您的需要,您可能需要购买商业许可证。
NServiceBus是一个非常固执己见的框架。如果你正在考虑,我建议你做一个尖峰测试,看看实现你需要的功能有多难。你可能会发现它要么非常容易(你是用NServiceBus的方式来做的),要么非常令人沮丧。
MassTransit是不错的,尽管文档不完整并且存在一些错误。它还被设计为只能在防火墙内进行通信。
我喜欢RabbitMQ(它有一个.NET客户端);考虑评估一下它是否符合你的需求。它并不能完成NServiceBus所做的一切,但您可能不需要额外的功能。
附言:如果有人建议乘坐犀牛服务巴士,请转身走开。就连作者也承认,这些文件"……至少可以说是多余的。"
*免责声明-我不是律师。
我个人认为这是某种ESB的情况。使用已建立的ESB(如NserviceBus使用的MSMQ)的好处是可以获得消息持久性之类的东西。
我还认为,使用ESB来处理通信层有助于通过将两个域(发布域和消费域)分离得比使用自定义网络解决方案