1

当队列已满时, Send()不会抛出异常。

我有两个私人消息队列,比如队列和队列1,我将队列1的消息存储设置为少量,比如5120 kb,在我的程序中我将消息发送到队列和队列1,当队列1已满而全局队列未满时, queue1 上的 Send() 方法没有抛出异常,这是为什么呢?我期待 queue1 上的 send() 方法抛出异常,所以我知道它已满。

队列消息存储

4

1 回答 1

1

我认为这是设计使然:

来自MSMQ 常见问题解答

即使很明显无法发送消息,MQSendMessage() 也总是成功。为什么?MQSendMessage() 的成功并不能保证将消息传递到其最终目的地。MQSendMessage() 的成功仅仅意味着本地的MSMQ 服务成功地接受了该消息,它会尽快处理它。它并不意味着将消息传递到其目标队列的任何保证。无法传递消息的原因有很多。例如:

  • 您尝试将非事务性消息发送到事务队列。
  • 您向已超出其配额的队列发送消息。
  • 您将消息发送到未授予您发送权限的队列。
  • 您使用 DIRECT 格式名称向不存在的计算机发送消息。

根据设计,MQSendMessage() 在所有这些情况下都会成功。拒绝此类消息的是目标计算机。或者消息将在传出队列中等待,直到过期。

于 2013-10-30T09:52:57.847 回答