我有一個Windows服務使用NServiceBus來處理傳入的消息。 在處理消息時,我想檢查隊列上是否有其他剩餘消息要處理。 解決這個問題的最好方法是什麼?在處理NServiceBus消息時,是否可以查看輸入隊列?
回答
對於這個特定的場景,我會說一個傳奇可能是合適的,它通過收到的第一條消息創建,打開一個超時(讓我們說一分鐘),在那段時間收集所有消息,然後總線.SendLocal包含所有行的消息,爲此另一個處理程序創建電子表格並上傳。
這聽起來很不錯,謝謝。但是,即使在一個傳奇中,知道隊列中是否還有更多消息會很有用。在這個系統中,郵件分批發送,每次數千個,然後幾個小時都沒有。理想情況下,我不想開始電子表格的創建和上傳,直到我從該批次中收集了來自總線的所有消息。 關於在隊列中窺視的任何建議?或者出於某種原因,這只是一個非常糟糕的主意? –
然後,如果自上次超時後收到任何消息,並且只發送信息,則可以使用超時方法檢查事務。 –
因爲,NServiceBus
使用的是MSMQ
,所以您可以使用System.Messaging
中的方法。 包括一個修改的方法,我目前正在進行一種批處理。
using System.Messaging;
public int PeekAtQueue()
{
const string QUEUE_NAME = "private$\\you_precious_queuname";
if (!MessageQueue.Exists(".\\" + QUEUE_NAME))
return 0;
var messageQueues = MessageQueue.GetPrivateQueuesByMachine(Environment.MachineName);
var queue = messageQueues.Single(x => x.QueueName == QUEUE_NAME);
return queue.GetAllMessages().Count();
}
在編輯器中自己修改。希望它仍然編譯:) 這裏發現了類似的討論,順便說一句:
http://jopinblog.wordpress.com/2008/03/12/counting-messages-in-an-msmq-messagequeue-from-c/
- 1. 防止NServiceBus從在輸入隊列中處理消息
- 2. Windows消息隊列是否以FIFO方式處理消息?
- 3. NServiceBus消息隊列建立
- 4. VB6查看消息隊列
- 5. 是否可以在輸入多個單詞時查看兩列?
- 6. NServiceBus。處理隊列中的指定消息
- 7. NServiceBus稍後處理消息
- 8. NServiceBus延遲消息處理
- 9. 用於檢查排隊消息是否仍然可以處理的模式
- 10. NServiceBus沒有輸入隊列
- 11. 是否可以查看FASM預處理器輸出?
- 12. 如何在nservicebus中預處理消息?
- 13. 是否可以使用Tibco隊列客戶端查看收到的隊列消息?
- 14. 是否可以在RabbitMQ隊列之間移動/合併消息?
- 15. 用NServiceBus遠程暴露消息隊列
- 16. 我們可以讓rabbitmq隊列不處理消息
- 17. 如果處理時出現異常,可以防止NServiceBus將消息移動到錯誤隊列中?
- 18. 如果Windows服務停止,NserviceBus是否完成消息處理?
- 19. 用戶是否也可以在NServiceBus中發佈/發送消息?
- 20. 您可以在RabbitMQ .Net客戶端中處理隊列時發佈消息嗎?
- 21. 如何使用NServiceBus在AWS中實現消息隊列和處理
- 22. 如何查看隊列中的消息
- 23. 你可以有多個輸入msmq隊列到nServiceBus主機?
- 24. NServicebus消息處理程序是否應該處理業務邏輯?
- 25. DLL中的Windows消息隊列處理
- 26. 後臺處理與消息隊列
- 27. BizTalk消息隊列(等待處理)
- 28. 消息隊列:網絡故障時消息是否丟失?
- 29. webjob可以處理隊列存儲消息的最大速率是多少?
- 30. NServicebus和消息處理順序
斯科特出於好奇,爲什麼你關心,如果其他消息隊列? –
我有一個處理程序將消息轉換爲電子表格的行,以便上載到遺留系統。 (一條消息=一行)。我不想將電子表格移到上傳文件夾,直到隊列中沒有更多消息。即我想上傳一個大的電子表格,而不是1000行的一行電子表格。 –
處理這種情況的另一種方法是將每條消息「票證」,例如10箇中的1個,10箇中的2個等。這顯然必須在發送方一側完成。 –