我正在运行BizTalk 2006,并且我有一个业务流程,它接收一系列与BTS.MessageType相关的消息(订单)。根据我的延迟形状,我检查时间到午夜,这是批次切断。我偶尔会收到循环结束后收到消息的实例,这就是创建Zombie消息。我仍然需要处理这些消息,但是在业务流程的新实例中。我需要一些如何优雅地处理这个问题的想法。
答案 0 :(得分:3)
一种选择是关联日期(除了BTS.MessageType)
您必须创建一个管道组件,以便在没有时间的情况下提升日期。但是可能会有一些时间窗口,消息将会随机发生#34;要么是旧实例还是新实例(例如,如果您有多个BizTalk服务器的时间略有不同,或者系统时钟与NTP源重新同步)。为了安全起见,请等待几分钟,然后再结束前一天的实例。
如果旧实例和新实例之间的重叠窗口存在问题,则应该关联另一个每天只更改一次的值,例如存储在数据库中并由管道组件提升的Guid。
否则,我已经成功使用了你的" hackish"过去项目中的解决方案,只要您能够容忍一个小窗口,其中消息排队并且不会每天立即处理几分钟。在我的情况下它很好,因为消息是由美国用户在工作日生成的,并通过FTP或MSMQ发送。但是,如果您有通过Web服务发送邮件的国际用户,那么您可能没有时间可能无法收到任何内容,并且Web服务无法将邮件排入队列后来处理。