2010-10-21 69 views
0

我正在爲ebXML消息傳遞應用程序編寫消息處理程序。該消息遵循請求 - 響應模式。該過程非常簡單:發件人發送消息,收件人收到消息併發送回應。到現在爲止還挺好。具有響應時間限制的異步請求 - 響應算法

接收到一條消息後,接收方有一個設置的消息響應時間(TTR)。這可能是從幾秒到幾小時/天的任何地方。

我的問題是這樣的:發件人應該如何處理TTR?我需要這是一個異步過程,因爲TTR可能會很長(幾天)。我怎樣才能以某種方式倒計時器,但不會佔用很長一段時間的系統資源。可能會有大量的消息。

我最初的想法是有一個「等待」收集,添加消息ID,以及其TTR到期時間。然後我會定期輪詢收集。當計時器到期時,消息Id將被移動到「Expired」集合,並且消息事務將被終止。

當發件人收到回覆時,它可以檢查「正在等待」收集其匹配的已發送消息,並確認及時收到回覆。然後該消息將從集合中移除以用於下一個處理階段。

這聽起來像一個強大的解決方案。我確信這是一個解決的問題,但有關這類算法的信息很少。我打算用C#實現它,但在我認爲的這個階段,實現語言是無關緊要的。

感謝您的輸入

回答

1

根據客戶端的數量,您可以使用持久性JMS隊列。每個客戶端ID有一個隊列。該消息將保留在隊列中,直到客戶端連接到它以檢索它。

我不理解TTR的目的。如果在一定的時間內回覆無法返回,那麼請不要打擾發送呢?或者是在服務器上使用它來安排工作並做現在所需的工作,然後用稍後的響應時間推遲請求?

這是一個廣泛的問題...