与MassTransit或手写MSMQ客户端等框架相比,使用WCF有哪些优势?

与MassTransit或手写MSMQ客户端等框架相比,使用WCF有哪些优势?,wcf,architecture,msmq,soa,masstransit,Wcf,Architecture,Msmq,Soa,Masstransit,我正在考虑在即将到来的项目中使用MSMQ作为异步执行的解决方案。我想知道使用WCF和MassTransit之类的框架,甚至手写的MSMQ客户端来放置/读取MSMQ上的任务之间的区别 基本上,应用程序将是几个网站(内部通过LAN或外部通过Internet)通过服务层(无论是WCF还是普通web服务)读取/写入数据。然后这个服务层将做两件事中的一件:1。将数据写入数据库2。和/或通过在队列中放置消息来触发后台进程。3.显然,它还可以从数据库中检索数据。队列另一端的小代理(windows服务)将监视队

我正在考虑在即将到来的项目中使用MSMQ作为异步执行的解决方案。我想知道使用WCF和MassTransit之类的框架,甚至手写的MSMQ客户端来放置/读取MSMQ上的任务之间的区别

基本上,应用程序将是几个网站(内部通过LAN或外部通过Internet)通过服务层(无论是WCF还是普通web服务)读取/写入数据。然后这个服务层将做两件事中的一件:1。将数据写入数据库2。和/或通过在队列中放置消息来触发后台进程。3.显然,它还可以从数据库中检索数据。队列另一端的小代理(windows服务)将监视队列并根据任务命令执行

与RPC或分布式执行或其他方式相比,此体系结构将非常易于扩展(添加更多队列和代理),并且易于实现。代理处理不需要是实时的。代理层和服务层是独立的应用程序,只是它们共享公共域对象和存储库等


你觉得怎么样?欢迎对上述需求提出架构建议。谢谢大家!

您的架构似乎合理合理。但是,您应该考虑使用手工编码的MSMQ类使用WCF NET MSMQ传输。WCF将这一常见功能包装到一个很好的编程模型中。我还相信,与基本系统相比,wcf使用的协议有一些改进。消息传递wcf在MSMQ上添加了一个抽象。事实上,一旦定义了兼容的契约(操作必须是单向的),就可以透明地在配置中切换出MSMQ。(例如,您可以切换到普通的HttpWS或NetTcp绑定。)

您应该评估WCF的其他优势,如安全性等,以了解这些优势如何满足您的需求。同样,它们应该对您在下面使用MSMQ的事实相当透明。例如,添加SOAP安全性等应该“正常工作”,与使用MSMQ无关

(虽然,IIRC,您仍然需要使用MSMQ的服务帐户登录到每台使用MSMQ的机器上的桌面,才能在机器本地配置文件中生成证书。然后,从IIS6开始,由于没有加载用户配置文件,它的工作不太好。一般来说,这是一个真正的难题,但与WCF无关。)


除此之外:

您看过SQL Server Service Broker吗?在使用MSMQ+WCF和SSSB之后,我认为SSSB的配置和管理要容易得多。SSSB在任何SQL客户机上使用T-SQL命令(我在Mono、Linux和事务上使用它)。它还将为您提供事务性发送/接收,甚至是远程发送/接收(我认为MSMQ 4现在允许这样做)。消息队列真的会带来很多痛苦,若您已经在使用SQL Server


SSSB经常被忽略,因为SQL Management Studio没有GUI设计器,但它并不难,而且是一个很好的选择。一个缺点是,如果需要本地发送功能(即,在网络关闭时对消息进行排队),则需要运行本地SQL Express实例

看看普通MSMQ的附加值:


总之,通过MassTransit,您可以在API中清楚地看到许多消息传递概念;在某种程度上,如果你手工编码或使用WCF,你就不会有这种感觉。

你提到“无论是WCF还是普通的web服务”。如果你指的是ASMX web服务,我建议你不要使用它们——它们是过去的,WCF是现在的。是的,我指的是ASMX,就SOA而言,我仍然生活在过去。LOL7年过去了,web服务的WCF也是过去的:-)它是web API,现在是2016年,您希望每小时处理多少百万条消息?一旦您将事务纳入其中,SSSB可以比MSMQ快得多,对吗?本地传输与DTC?但是,如果你不想使用SQL,那就另当别论了。无论如何,正如我的主要答案所指出的,WCF为你提供了WCF编程、安全等模型,并且在很大程度上并不特定于MSMQ。通过.NET MSMQ API,你可以访问WCF-MSMQ隐藏的东西。喜欢可爱的,所以根据您的需要,您可能希望直接使用MSMQ。我同意没有必要在原生MSMQ周围手工编写.NET类