带有订户缓存的WCF Pub / Sub

时间:2008-12-24 11:38:02

标签: c# wcf architecture disaster-recovery

问题:如何使用WCF提供分布式,可扩展且抗灾的发布/订阅服务。

详细信息:

请注意,除了消息/中间件解决方案(如Tibco EMS)之外,还考虑采用此方法。

我一直在研究WCF,特别是它如何用于提供pub / sub。关于这个主题,这篇文章非常好:WCF pub-sub

在文章中,作者试图解决拥有多个发布者的问题(就像一个服务层在几个框中扩展一样)。问题在于,如果客户端A向发布者A注册但发布者B希望发布事件,则发布者B将不知道客户端A.即没有人告诉发布者B客户端A想要被通知有关事件。作者建议将pub / sub服务作为解决方案。发布/订阅服务将集中存储订阅。但是,如果我想通过二级/双级发布/订阅服务来使pub / sub服务具有抗灾性,那么我就会遇到同样的原始问题。

所以,我认为这个问题有几个解决方案:

  1. 将订阅者详细信息存储在分布式缓存中(请参阅问题:q1q2)。
  2. 将订户详细信息存储在数据库/中央文件系统中。
  3. 有人能想到任何其他解决方案(即我没有错过WCF的一些神奇功能吗?) 任何评论都赞赏。

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,我对这个问题做了很多研究。问题实际上很简单。您希望保持一些集中状态,但是采用分布式方式。我发现实现这一目标的最佳方法是使用分布式缓存。以速度为例。我知道没有可以解决状态管理问题的本机WCF解决方案。我甚至研究过持久服务,其中状态管理由WCF处理,但不适用于发布/订阅服务,因为状态需要集中在所有客户端连接上。将数据存储在数据库中也是一种选择,但成本是对数据库的需求,即使对于数据库,如果数据库不是集群的,也可能会出现单点故障。

最后,我认为实现零点故障实际上是​​昂贵的,如果你决定去那里看看Azure,存储的未来在云上,Azure服务将是完全的可扩展和分布式,但我们还没有。

答案 1 :(得分:0)

我认为WCF还没有。您需要的是一个代理,它为您处理所有这些细节,以便您可以实现您的业务逻辑。像ActiveMQ那样有一些非常好的。如果您需要编排,那么您可能想要使用也可以坐在经纪人之上的公共汽车。我认为WCF很精彩,但是尝试将它变成不是的东西,这不是一个好主意。