这个问题的一部分是我甚至不确定我究竟需要问什么,所以我将从这里开始并从那里开始工作。
我正在研究的一个项目涉及通过aspComet库使用COMET。该程序的用例在某种程度上是一个协作幻灯片。一个人管理其中的大部分,一个或多个参与者能够执行某些操作。在屏幕上执行操作之间的低延迟
以前,它只是在一台服务器上运行。现在,我们想要将其扩展一点,更多的是出于可靠性而非性能原因。所以,我们在Rackspace的云中提供了一些盒子以及所有有趣的东西。
我从一开始就知道我需要对COMET的工作方式做一些改变,因为同一个“show”中的不同人可能在不同的服务器上,我无法知道什么“显示”他们属于他们已经到达网站之后。
我最初使用WCF Mesh提供程序解决了这个问题,这个提供程序没有详细记录,现在我遇到了调度消息的问题,有时会丢失或延迟(我不是100%肯定是什么正在那里),但它搞砸了COMET的长轮询并以相当奇怪的方式打破了事情(单击按钮可能会触发事件,或者它会挂起10秒{长轮询持续时间}并且实际上什么都不做)
更多的研究让我相信其中一个.Net服务总线提供商可能会做我需要的。但是,我找不到能满足我需要的例子:
我的理想解决方案将涉及当服务器启动时,它让其他服务器知道它的存在(即使它只是某个表中的某一行),并且它们可以开始在每个服务器之间发送广播消息既是出版商又是订户。这就是我在WCF网格提供程序中所拥有的,但我对该代码并不过分自信。
有人能指出我正确的方向吗?在这一点上,甚至在服务总线提供商的文档中寻找合适的术语也会很好。或者服务巴士不是我想要的?此时我会决定在每个Web服务器上设置一个Jabber服务器并使用它,如果它符合我的约束。
答案 0 :(得分:1)
我不能说NServiceBus,但我希望答案类似。
单点故障:MSMQ可以使用多播,这意味着每个端点都会广播它,并且不需要DB表。 RabbitMQ使用此Exchange-to-Queue绑定过程,这意味着只要Rabbit实例或群集已启动,则消息仍然存在。 RabbitMQ可以集群,MSMQ不可以。 *注意:您可能在使用Rackspace进行多播时遇到问题,不知道它们是如何工作的。如果是这样,您将不得不依赖于MSMQ(而不是RabbitMQ)的运行时服务,这会产生单点故障,因为每个人都有一个点来协调控制消息。
同伴的硬编码:上面讨论了一下; MSMQ的多播处理它。兔子它也可以完成,只需将队列绑定到你想听的交换。 MassTransit为您解决这个问题。
近实时:这两者都使用接近实时的消息。您的消息使用者代码中没有轮询。
我认为服务总线似乎是您正在尝试的合理解决方案。可能需要更多细节,但一般的消息传递方法是正确的。如果您决定在RabbitMQ之上只需要一些东西并配置Rabbit来处理大部分内容,那么还有其他更轻量级的消息传递库。
要开始使用MassTransit,我们提供了文档:http://readthedocs.org/projects/masstransit/和邮件列表http://groups.google.com/group/masstransit-discuss。如果您有将来的问题,请加入邮件列表,有人会尽力帮助您。