gpt4 book ai didi

msmq - 将 MSMQ 消息从一个队列路由到另一个队列

转载 作者:行者123 更新时间:2023-12-02 14:26:17 26 4
gpt4 key购买 nike

是否有某种标准配置设置、服务或工具可以接受来自一个队列的消息并将其移至另一个队列?自动处理死消息问题,并提供一些重试能力?我想这就是“MSMQ 消息路由”所做的事情,但似乎找不到有关它的文档(Windows Mobile 6 除外,我不知道这是否相关)。

上下文:

我知道,当使用 MSMQ 时,您应该始终写入本地队列,以便不太可能出现故障,然后 X 应该将该消息移动到远程队列。我的理解有错吗?这就是像 Biztalk 这样的消息传递基础设施的用武之地吗?是否有必要先写入本地队列才能绝对确保成功?我应该自己构建 X 吗?

最佳答案

正如 Hugh 指出的,您只需要一个 MSMQ 队列即可从源到目的地单向发送消息。源和目标可以位于同一服务器、同一网络或跨 Internet,但是源和目标都必须运行 MSMQ 服务。

如果您需要进行“消息”路由(例如,处理来自多个源或目标队列的消息的交换机,或者根据消息类型将消息路由到一个或多个订阅者等),您需要的不仅仅是 MSMQ队列。虽然您当然可以使用 BizTalk 进行消息路由,但如果您不需要使用 BizTalk 的其他功能,这将是昂贵的/过度杀伤力。建议您查看开源代码,或者自己构建一些自定义的东西。

但是通过“路由”,您可能指的是使用 HTTP 作为传输时的队列重定向功能,例如通过互联网(例如 herehere )。

回复:发送失败并重试

我认为您已经掌握了大部分概念 - 一般来说,消息 DELIVERY 重试功能应该隐含在 MSMQ 中。如果 MSMQ 无法在定义的到期之前传递消息,则该消息将在死信队列中返回,然后源可以处理来自 DLQ 的消息,然后对它们进行“补偿”(例如,反转“发送”的操作,向用户指示失败等)。

但是,目标中的“处理”类型重试需要由目标应用程序/监听器执行(例如,如果目标系统出现故障、死锁等)

执行此操作的常见方法包括:

  • 使用两阶段提交 - 在分布式工作单元下,从 MSMQ 中提取消息并对其进行处理(例如,将数据插入数据库、更改某些记录的状态等),如果遇到任何失败,则离开消息返回到队列中,数据库更改将被回滚。
  • 应用程序级别重试 - 即在目标系统上,如果出现“可重试”类型错误(由于负载、死锁等导致超时),则休眠几秒钟,然后重试同一事务。

但是,在大多数情况下,无限期的处理重试是不可取的,您最终需要承认失败并实现一种机制来记录消息和错误并将其从队列中删除。

但我不会“重试”业务失败(例如业务规则、验证等),并且应在您对如何处理这些问题的要求中定义行为(例如帐户 overdraw 、消息格式不正确或不正确)有效等),例如通过向源返回“NACK”类型消息。

HTH

关于msmq - 将 MSMQ 消息从一个队列路由到另一个队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8795400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com