当队列已满时, Send()不会抛出异常。
我有两个私人消息队列,比如队列和队列1,我将队列1的消息存储设置为少量,比如5120 kb,在我的程序中我将消息发送到队列和队列1,当队列1已满而全局队列未满时, queue1 上的 Send() 方法没有抛出异常,这是为什么呢?我期待 queue1 上的 send() 方法抛出异常,所以我知道它已满。
当队列已满时, Send()不会抛出异常。
我有两个私人消息队列,比如队列和队列1,我将队列1的消息存储设置为少量,比如5120 kb,在我的程序中我将消息发送到队列和队列1,当队列1已满而全局队列未满时, queue1 上的 Send() 方法没有抛出异常,这是为什么呢?我期待 queue1 上的 send() 方法抛出异常,所以我知道它已满。
我认为这是设计使然:
来自MSMQ 常见问题解答:
即使很明显无法发送消息,MQSendMessage() 也总是成功。为什么?MQSendMessage() 的成功并不能保证将消息传递到其最终目的地。MQSendMessage() 的成功仅仅意味着本地的MSMQ 服务成功地接受了该消息,它会尽快处理它。它并不意味着将消息传递到其目标队列的任何保证。无法传递消息的原因有很多。例如:
- 您尝试将非事务性消息发送到事务队列。
- 您向已超出其配额的队列发送消息。
- 您将消息发送到未授予您发送权限的队列。
- 您使用 DIRECT 格式名称向不存在的计算机发送消息。
根据设计,MQSendMessage() 在所有这些情况下都会成功。拒绝此类消息的是目标计算机。或者消息将在传出队列中等待,直到过期。