托管环境中的MSMQ + WCF

问题描述

我们将要切换到几个系统,以使用某种类型的可靠体系结构,而使用消息传递就是我们想要做到的。 当时的想法是,我们将使用一些廉价的托管服务(共享的,而不是专用的)来进行呼叫,但是我们需要使呼叫可靠。如果目标服务器不可用,则在失败之前必须重试几次该消息。 访问网页>站点将请求添加到队列>消息传递到目标端点 这可以与共享主机一起使用吗?如果WCF + MSMQ不起作用,还有哪些其他选择?     

解决方法

如果您能够使用Server 2008通过netMsmqBinding端点为WCF服务提供呼叫共享主机的功能,则可以利用MSMQ 4增强的失败消息处理功能。只需少量额外的编码,就可以将WCF netMsmqBinding配置为自动重试失败的消息,并将失败的消息从队列移到特殊的毒害队列,以便服务可以继续处理消息。一旦可以再次访问共享主机,您可以将消息从病毒队列手动移回主要消息组以进行重新处理,也可以编写另一个服务来自动处理此任务。在MSDN上的这篇文章应该是设置基于MSMQ的WCF服务的一个良好的开始,并且本文展示了有毒消息处理的工作方式。     ,在共享的托管环境中,由主机决定是否允许您使用MSMQ(甚至是您无法自行安装的RabbitQ)。 WCF over MSMQ的工作原理是WCF将消息写入队列,然后MSMQ处理消息到目标的传递,然后使用消息激活WCF,就像您通过SOAP调用它一样。 底线是:您将需要检查您的主机是否允许消息队列。如果这样做,请确保为它们添加安全性,以使服务器上的其他站点无法访问它们。 如果服务器上未安装MSMQ,则无法使用net MsmqBinding     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...