2010-08-05 365 views
0

公司A具有基於異步池的web服務以進行通知。 B公司檢查通知。每當它讀取新的通知時,A都會從系統中刪除它們。因此後續的讀取請求只返回新的通知。如果在30秒內沒有響應,還需要客戶端B中斷連接。Web服務設計

這會導致一個潛在的問題:由於意外的緩慢,A可能會在請求中刪除通知並將響應發回,而B已經中斷連接。在這種情況下,通知會丟失。現在人們可以爭辯說,核心問題在於操作領域(HTTP響應必須在20秒內完成)仍然在實踐中,但這並不總是可行的。

如何設計B(客戶端)以避免此問題?

我可以看到的一種方式是不要刪除A的通知,並讓B知道它的狀態,以便它知道從處理通知所需的ID開始,但是這假定ID將是順序的。哪個由A控制。即使B定義了它自己的序列A也必須被修改以返回它。

還有其他方法嗎?

謝謝!

回答

0

一般來說,Web服務不夠可靠,因此將「讀取」請求作爲「刪除」請求提供雙重職責幾乎不是一個好主意,尤其是在客戶不知情的情況下。連接丟失或超時的風險太大。沒有辦法通過修改客戶端來繞過這個只有,因爲它是這裏的錯誤服務器 - 它設計的方式從根本上不適合Web服務。

我認爲你在正確的軌道上增加ID的想法。客戶端知道(或可以修改)知道它收到了哪些通知,因此,如果它可以提供它在輪詢通知時收到的最後一條消息的ID,則服務器應該能夠根據該ID進行響應。

0

它真的好像公司A的web服務應該是同步的而不是異步的。如果這是不可能的,向新公司發送類似「ACK」的響應可能是一個好主意。表示已收到特定通知(由B公司)並可被刪除的web服務。