服务代理 - 与外部应用程序通信时,多个队列与单个队列

时间:2010-02-04 09:19:10

标签: web-services service-broker

我们目前有一个应用程序使用服务代理将消息排队以发送到外部系统,我们通过Web服务接口与之通信。

目前我们只与一家公司集成,因此一个队列就足够了 - 但是我们需要开始将消息传递给所有使用相同Web服务接口的多家公司。

我想知道单个队列系统是否足够,或者我们是否应该为每个公司设置一个队列。每个公司都有一个队列,我担心扩展它,因为我们可以有很多队列,然后有很多连接来检查队列。

使用单个队列,我们​​可以根据需要添加更多阅读器。但是,如果我们无法与其中一个外部系统进行通信(例如连接问题),那么该消息就没有问题,我们想要重试它,但我们不想延迟那些公司的消息。系统正在兴起。我想知道人们目前如何处理类似的情况?

我们可以重新发送消息,但我对此的担忧是我们不保证交付顺序。

1 个答案:

答案 0 :(得分:3)

我假设通过“重新插入”一条消息,你只是回滚收到它的交易。效果将是消息将再次作为来自给定对话的第一条消息可用于接收(因此您不必担心保留传送顺序)。也就是说,这种方法存在问题,即poison message handling。如果回滚给定队列的5个连续接收,则队列将被禁用。

Klaus Aschenbrenner's book中详细描述的另一种方法是拥有待处理请求表。一旦激活的过程从Service Broker队列收到请求消息,它就会尝试进行Web服务调用。如果由于某种原因失败,请求将被放入待处理请求表中并每隔一段时间重试一次(您可以使用conversation timers来安排重试)。这样,如果Web服务不可用,它将不会阻止Service Broker读取器为其他公司提供服务(假设第一个请求的超时足够小)。并且由于无论Web服务调用是否成功都将提交接收,因此您不会遇到毒性消息问题。

相关问题