Problem:如何使用 WCF 提供分布式、可扩展且具有抗灾能力的发布/订阅服务。
Details:
请注意,除了 Tibco EMS 等消息传递/中间件解决方案之外,我们还在考虑这种方法。
我一直在研究 WCF,特别是如何使用它来提供发布/订阅。关于这个主题,这篇文章非常好:WCF 发布-订阅 http://msdn.microsoft.com/en-gb/magazine/cc163537.aspx.
在本文中,作者尝试解决拥有多个发布者的问题(就像跨多个盒子扩展的服务层一样)。问题是,如果客户端 A 向发布者 A 注册,但发布者 B 希望发布事件,则发布者 B 将不知道客户端 A。即,没有人告诉发布者 B 客户端 A 希望收到有关事件的通知。作者建议使用发布/订阅服务作为解决方案。发布/订阅服务将集中存储订阅。但是,如果我想通过拥有辅助/双发布/订阅服务来使发布/订阅服务具有抗灾能力,那么我会遇到同样的原始问题。
所以,我认为这个问题有几个解决方案:
- 将订阅者详细信息存储在分布式缓存中(请参阅问题:q1 https://stackoverflow.com/questions/125697/wcf-application-caching-implementation and q2 https://stackoverflow.com/questions/21870/systemwebcaching-vs-enterprise-library-caching-block).
- 将订户详细信息存储在数据库/中央文件系统中。
任何人都可以想到任何其他解决方案(即我没有错过 WCF 的一些奇妙的神奇功能?)
任何意见表示赞赏。
我遇到了同样的问题,并且我对这个问题做了很多研究。问题其实很简单。您希望以分布式方式保留一些集中式状态。我发现实现这一点的最佳方法是使用分布式缓存。以速度为例。据我所知,没有任何原生 WCF 解决方案可以解决状态管理问题。我什至研究了持久服务,其中状态管理由 WCF 处理,但不适合发布/订阅服务,因为状态需要集中用于所有客户端连接。将数据存储在数据库中也是一种选择,但代价是需要数据库,并且即使使用数据库,如果数据库不是跨多台机器进行集群,也可能会出现单点故障。
最后,我认为实现零故障点的东西实际上是昂贵的,如果你决定去那里,那么看看 Azure,存储的未来是在云上,Azure 服务将是完全可扩展和分布式的,但我们还没有到那一步。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)