2013-10-30 75 views
1

Send()當隊列已滿時不會引發異常。我有兩個私人消息隊列,比如隊列和隊列1,我設置隊列1的消息存儲量爲5120 kb,在我的程序中我發送消息給隊列和隊列1,當隊列1已滿而全局隊列未滿,則隊列1上的Send()方法不會引發異常,爲什麼?我期待queue1的send()方法拋出異常,所以我知道它已滿。單個隊列上的消息隊列存儲限制不起作用?

queue message storage

+0

請說明發件人和隊列是否在同一臺或不同的機器上 –

回答

1

我認爲這是由設計:

MSMQ FAQ

MQSendMessage()總是會成功,即使它是明顯, 消息無法發送。爲什麼? MQSendMessage()的成功不會保證將郵件傳遞到其最終目的地。 MQSendMessage()的成功僅僅意味着本地MSMQ服務 已成功接受該消息,並且只要 可能就會處理它。它並不意味着將郵件傳遞到其目標隊列的任何保證 。傳遞 消息失敗的原因很多。例如:

  • 您嘗試向事務隊列發送非事務性消息。
  • 您將消息發送到超過其配額的隊列。
  • 您將消息發送到不授予您發送權限的隊列。
  • 使用DIRECT格式名稱向不存在的計算機發送消息。

MQSendMessage()將在所有這些情況下通過設計成功。它是拒絕這些消息的目的地計算機 。或者消息 將在傳出隊列中等待,直到它到期。

+0

如果目的地是遠程的。發送將在本地傳出隊列中創建消息,它不知道任何配額限制。如果目標是本地的,則發送應該嘗試直接在本地隊列中創建消息並失敗。 –

+0

@JohnBreakwell,如果隊列是本地的,並且我在單個隊列上設置了配額限制,當隊列已滿時,Send()仍然成功無例外。 – Benny