单个队列上的消息队列存储限制不起作用?

时间:2013-10-30 08:08:30

标签: c# msmq

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

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

queue message storage

1 个答案:

答案 0 :(得分:1)

我认为这是设计的:

来自MSMQ FAQ

  

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

     
      
  • 您尝试将非事务性消息发送到事务队列。
  •   
  • 您将邮件发送到超出其配额的队列。
  •   
  • 您将邮件发送到不授予您发送权限的队列。
  •   
  • 使用DIRECT格式名称将消息发送到不存在的计算机。
  •   
     根据设计,MQSendMessage()将在所有这些情况下成功。它是   拒绝此类消息的目标计算机。或者消息会   等待传出队列,直到它过期。