是否有一些标准配置设置,服务或工具接受来自一个队列的消息并将它们移动到另一个队列?自动处理死信息问题,并提供一些重试功能?我当时认为这是"MSMQ消息路由"所做的,但似乎无法在其上找到文档(除了在Windows Mobile 6上,我不知道这是否相关).
语境:
我知道在使用MSMQ时,您应该始终写入本地队列,以便不太可能发生故障,然后X应该将该消息移动到远程队列.我的理解错了吗?这是Biztalk等消息传递基础设施的用武之地吗?是否没有必要首先写入本地队列以绝对确保成功?我应该自己建立X吗?
正如休指出的那样,只需要一个MSMQ队列就可以从一个源向目的地发送一个方向的消息.源和目标可以位于同一服务器,同一网络或Internet上,但源和目标都必须运行MSMQ服务.
如果您需要执行"消息"路由(例如,处理来自多个源或目标队列的消息的交换机,或根据消息类型将消息路由到一个或多个订户等),您将需要的不仅仅是MSMQ队列.虽然您当然可以使用BizTalk进行消息路由,但如果您不需要使用BizTalk的其他功能,这将是昂贵/过度的.建议你看看开源,或自己构建定制的东西.
但是,通过"路由",您可能会在使用HTTP作为传输时(例如在此处和此处)使用队列重定向功能.
回复:发送失败并重试
我认为你有大多数概念 - 通常消息DELIVERY重试功能应该隐含在MSMQ中.如果MSMQ在定义的到期之前无法传递消息,那么它将在死信队列中返回,然后源可以处理来自DLQ的消息然后"补偿"它们(例如,反转'发送'的动作,表示用户失败等).
但是,目标应用程序/侦听器需要执行目标中的"处理"类型重试(例如,如果目标系统已关闭,死锁等)
常见的方法包括:
但是,在大多数情况下,无法进行无限期的处理重试,您最终需要承认失败并实施一种机制来记录消息和错误并将其从队列中删除.
但我不会"重试"业务失败(例如业务规则,验证等),并且行为应该根据您对如何处理这些行为的要求进行定义(例如,帐户透支,消息格式不正确或无效等等) ),例如通过将"NACK"类型的消息返回到源.
HTH