我应该从WCF交换到NserviceBus吗


13

我们有一个中央服务器,可以从位于客户端网络中各个位置的多台PC发送和接收消息。为了简化此操作,目前,我将WCF与TCPNetBindings结合使用,并使用通过证书保护的双工通信。

现在,我们有很多问题-主要是我们被要求支持“断开模式”(我们需要容错)。据我所知,没有简单的方法可以使用WCF堆栈执行此操作-我们需要实现一些功能,也许还要使用msmq。我最近一直在研究NServiceBus,从中可以看出它似乎很合适-容错能力,可以通过简单的http网关通过Internet发送消息等。我知道它在社区中广受尊重,并且从调查中可以看出原因。

所以,我的问题是……使用NServiceBus听起来像是一个明智的主意,还是有人有与此相关的任何其他建议/现实世界经验?我想我担心引入的新技术我了解的相对较少,并且面临诸如保护它,以可靠的方式设置一切,一路走来的陷阱之类的问题。.我也对“黄金-电镀”的体系结构,然后选择一些有光泽的方法,最终会使我在实现过程中陷入困境,而不是坚持使用WCF并使之对我有用。

谢谢!


1
>支持“断开连接模式”(我们需要容错)您是否仍然需要自己在客户端建立大量的容错能力?MSMQ在服务器上的容错功能非常适合在出现问题的情况下恢复状态,但是我仍然认为,无论您选择什么,都会给客户端带来很大的麻烦。
brian 2012年

1
好吧,我需要支持的是“保证”,即客户端将向服务器发送消息,服务器最终将获得消息-因此,如果我们处于脱机状态,则需要继续尝试直到到达目的地为止。这就是NSB做“免费”,而作为一个WCF的解决方案(我认为)需要代码..
马特·罗伯茨

我部分同意Brian的观点。MSMQ(如果在最新版本中进行了正确配置),只要您将队列和消息配置为以这种方式运行,即可为您提供非常好的断开连接模式。客户端可以将消息保留在本地传出队列中,并在远程队列上再次使服务器可用时重新发送。
比尔

WCF具有MSMQ绑定...我非常了解一些利用此功能的大型成功应用程序。也就是说,我也喜欢nServiceBus,但是它做的是不同的事情。
凯尔·霍奇森

Answers:


12

我的建议是,如果需要快速了解此信息,而仅需要简单的操作以促进WCF的持久(断开连接)操作,则建议查看WCF-MSMQ绑定。如果在较大的环境中需要某些东西,请查看nServiceBus。

在我看来,nServiceBus实际上将在更大的分布式环境中开始发光。以下面的示例为例(使用WCF可能会陷入困境,而使用nServiceBus则很简单):

  • 基础架构由应用程序服务器层,缓存服务器层,只读数据库层,读/写数据库层组成
  • 每当客户提交新条目时,您真的希望立即更新所有这些层
  • 在WCF中,您需要在每个级别上公开单独的服务,并让客户端将其推送给所有服务(或者让一些中央业务流程为您做同样的事情)
  • 在nServiceBus中,您将使每个层成为该信息的订户,并且客户端将发布该信息一次,从而使服务总线能够处理其余信息

WCF具有MSMQ绑定

但是,如果您主要需要坚持使用WCF(时间紧迫,需要其他WCF功能),建议您在MSDN上阅读本文。它显示了如何将WCF绑定用于MSMQ,然后显示了如何将一项服务从HTTP迁移到MSMQ。在此过程中,它向您显示了此方案的一些问题(以及对这些问题的有用解决方案)。

这两个建议都大量使用了MSMQ,因此请注意:与Apache MQ,RabbitMQ和其他流行的排队系统不同,MSMQ不是典型的基于代理的队列体系结构,而是分布式队列。这意味着,如果您的WCF客户端无法通过MSMQ传输发送消息而无法连接到承载该队列的远程服务器,则该客户端计算机会将消息放入本地称为“传出队列”的队列中。该消息将安全地保留在那里,直到客户端的MSMQ服务检测到它可以再次连接到远程MSMQ服务为止。那时,消息将从客户端流到最终目的地。

上面至少有一个警告-如果远程服务器脱机时间太长(请查看您的MSMQ文档),客户端将放弃并将消息从传出队列移到死信队列。传输到死信队列中的邮件无法自动重新发送,必须重新构造。

如果您需要加密而没有ActiveDirectory,则在此Blog条目上,Sergey Sorokin详细介绍了使用不带Active Directory的WCF加密MSMQ通信所需的步骤。


7

它们不是一对一的替换-很多时候,您将使用NServiceBus向WCF端点中馈送消息或从WCF端点接收消息。

无论如何,处理这样的非连接模式方案是消息队列真正发光的地方。NServiceBus是一个不错的起点。那里还有许多其他选择。我会注意到其中许多实际上都是在一天结束时包装MSMQ的-MSMQ是一个非常可靠的后端,当使其可访问时,可能值得使用。


谢谢。采取观点,尽管在我的情况下我认为是1:1替代,因为我的大多数WCF通讯都支持这些PC和服务器之间的通讯-nsb似乎为我照顾了所有这些,因此是交换-对我来说。
Matt Roberts

知道了,那么它应该对您来说很好。
Wyatt Barnett 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.