[英]Use MSMQ queue to decouple message producer and consumer?
對於將報告發布到SOAP服務的一些Windows服務(c#),我將不勝感激。
它從數據庫中獲取一組有限的報告(Oracle AQ表中的報告),將它們聚合到一條消息中,並將此消息轉發給WCF SOAP服務。 如果已成功通過SOAP傳輸報告,則會將其標記為“已發送”。 否則,它們將再次添加到AQ表(通過db作業)。
所以我提出了以下設計。 什么是最好的方式去? 隊列在可擴展性,穩健性,解耦方面是否會改進設計? 在這種情況下使用排隊是一個好主意嗎?
建議設計A:具有1到N個線程的服務。 每個線程同步處理報告(獲取報告,聚合,翻譯,通過SOAP發送)
建議設計B:Windows服務:
擬議設計C:
您選擇MSMQ有特殊原因嗎? 如果您使用建議的設計B,則可以使用BlockingCollection 。
我沒有看到MSMQ在這種情況下提供了特別的優勢,除非你想要多個進程或者你希望將它傳播到多台計算機上。
但你真的需要多線程嗎? 這里的限制因素似乎是數據庫訪問時間或與WCF服務的通信。 除非WCF服務必須先進行一些主要處理才能成功調用作業。
所以你確定你不能只有:
while there are unsent jobs in the database
get job
send job to WCF
if job sent successfully
mark job as sent
end while
顯然,我對你的情況的了解僅限於你在問題中發布的內容,所以我可能錯過了一些重要的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.