【发布时间】:2011-10-14 17:51:53
【问题描述】:
我有一个相当简单的 scatter-gather pattern 实现,它使用 IIS 托管的 Web 服务 (WCF) 作为请求处理程序(广播)和聚合器。
使用标准 NetMsmqBinding、单向消息合约和 WAS,一切都运行得非常顺利。但是现在我们想引入一个业务规则,聚合器只会等待一定的时间(可能是几天)来获得最终响应;如果部分或全部没有收到,它应该关闭该批次并发布它拥有的任何信息。通常它只会在所有端点都报告后才会启动发布。
我知道我可以对广播消息设置消息过期,这样端点就不会浪费时间做不必要的工作,但是触发提前发布呢?
NServiceBus 将sagas 视为一等公民,优雅地处理超时,而且我知道 BizTalk 实际上将整个分散-收集实现为单个编排。但我不想仅仅为了这一要求而部署任何新工具或服务。
有没有办法只使用 WCF 和 MSMQ 来实现长时间运行的批处理超时操作?
(再一次 - 聚合器托管在 IIS 中,所以我不能只设置一个计时器;应用程序池可以随时回收或关闭。)
【问题讨论】: