比方說,我們有一個HTTP網關站服務 滷麪HTTP網關和MSMQ健康狀況
我認爲情況
- 客戶端節點,在MSMQ本身停止從客戶端節點上的某種原因。在目前的實現中,Rebus HTTP網關將捕獲異常。
你覺得這個想法不僅僅是捕獲,MessageQueueException異常也可以發送到服務器節點並放在錯誤隊列中? (錯誤隊列的名稱可以從頭文件中獲取)
因此,如果沒有額外的基礎架構服務器就會知道客戶端有問題,所以有人可能會作出反應。
UPDATE:
我猜的答案描述的問題將得到提升。我應該更深入地解釋我的情況:)對不起。這裏是:
我打算修改HTTP網關的方式,InboundService將能夠同時執行 - 發送和接收消息。因此,出站服務將是唯一啓動連接的人(定期例如每5分鐘一次),以便從服務器獲取新消息並將其消息發送到服務器。這是因爲客戶端節點不被視爲服務器,而是作爲NAT後面的衆多客戶端之一。
事實上,服務器本身對客戶端的健康沒有興趣,但我雖然不是在客戶端創建單獨的警報服務,而是使用
HTTP網關HTTP網關代碼,但它可以完成這項工作, HTTP網關的雙方運行。如果客戶端根本無法訪問服務器,該怎麼辦?
由於MSMQ會死我想過使用過程中的獨立的持久性隊列對象一樣,http://ayende.com/blog/4540/building-a-managed-persistent-transactional-queue (只是一個示例實現,我不知道它有什麼樣的許可證) 對總的例外客戶端直到服務器可達。
客戶端多久會通知發生了錯誤的服務器?
我不知道那一部分 - 我想一次每5分鐘,但萬一是什麼樣子就沒有安排的時間,就像在當前的實現(雖然它可能與消息同步的預定時間(真)循環)?也許它可能只是由配置設置?
我想了解關於錯誤處理一致的策略,通常包括普通的舊NLOG登錄
由於客戶端節點將在NAT標準的監測技術背後的互聯網將無法正常工作。我想過使用隊列作爲NLog傳輸,但是由於MSMQ會死機,所以無法工作。
我也想過使用HTTP作爲NLog傳輸,但在服務器端它需要隊列(不是真的,但我想將它存儲在隊列中),所以我們回到了sbus和HTTP網關......那種的NLog傳輸實際上是HTTP網關的克隆。
UPDATE2: HTTP作爲NLOG運輸(由運輸我的意思是目標),還需要客戶端隊列就像我在描述「如果客戶無法到達服務器呢?」部分。這將是嵌入到NLog中的HTTP網關的克隆。瘋狂:)
所有的事情是,客戶端是不可靠的,所以我想擁有服務器端的客戶端的所有信息,並在那裏登錄。
UPDATE3
替代解決方案可以創建單獨的服務,然而這將是HTTP網關(例如OutboundAlertService)的一部分。然後三個目標將會實現:
- 共享發送循環代碼
- 無需額外的服務器基礎設施
- 上OutboundService沒有負面影響
它不需要OutboundService的異常,而是它會自己檢查MSMQ。
另一種替代解決方案是簡單地使用非MSMQ隊列作爲NLog目標,但這是醜陋的矯枉過正。
我更新了問題。在此先感謝您的幫助。 – user1121956 2014-09-02 09:59:11
感謝您的更新。我也想過了,直到週末,我會嘗試總結這篇文章中的信息和其他想法,以GitHub問題的形式,以及以叉子的形式祝福之後:) – user1121956 2014-09-04 11:47:40
非常棒!感謝你的堅持:) – mookid8000 2014-09-04 13:15:46