gpt4 book ai didi

如果目标队列不存在,MSMQ 会丢弃消息吗?

转载 作者:行者123 更新时间:2023-12-01 03:01:47 24 4
gpt4 key购买 nike

我遇到了一个奇怪的情况:

消息从 ServerA 发送到 ServerB。它进入 ServerA 的传出队列,然后发送到 ServerB 的队列。

服务器 B 崩溃了。我们不得不重新格式化。提起来的时候忘记安装MSMQ服务了。

消息开始在 ServerA 的传出队列中堆积,直到发送消息的程序抛出资源不足异常。

我们注意到错误并将 MSMQ 服务安装到 ServerB 上。 ServerA 开始立即清空其传出队列。

当我们启动程序来处理ServerB 上的消息时,它无法连接。我们了解到我们忘记在 ServerB 上创建队列。然而,此时,已经晚了。位于 ServerA 队列中的所有 900K 消息都已发送到 ServerB。据我所知,ServerB 将它们扔掉了,因为它没有配置目标队列。我已经知道正确的解决方案是在我们完全设置 ServerB 之前停止 ServerA 上的队列。

问题是:这真的是我们应该期待 MSMQ 的真实行为吗?我本以为 ServerB 会拒绝这些消息,而不是接收并丢弃它们,这是一种更具防御性的设计方法。

最佳答案

打开队列以将消息发送到远程计算机时(当 dwAccess 设置为 MQ_SEND_ACCESS 时),消息队列不检查队列是否存在。

来自 MSMQ 文档:

http://msdn2.microsoft.com/en-us/library/ms699817.aspx

原因似乎是 MSMQ 旨在用作异步传输,因此发送方发送,然后在此过程中可能会发生许多不同的事情,导致消息无法传递。
看起来确定检查的唯一方法是寻找返回的否定确认消息。我们从未使用过这些。
要么开始使用它们,要么尽量不要进行远程发送。

Usenet thread discussing this.

关于如果目标队列不存在,MSMQ 会丢弃消息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/306684/

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