簡體   English   中英

Java:互聯網中斷時在線更新數據的最佳實踐

[英]Java: best practice to update data online when internet can be interrupted


我有2個應用程序:

  • 桌面(java)
  • 網絡(symfony)

我的桌面應用程序中有一些數據必須與Web應用程序中的數據一致。
因此,基本上,我從台式機應用程序向Web應用程序發送了POST請求以更新在線數據。

但是問題是,當我發送請求時,互聯網不能總是可用,同時我不能阻止用戶更新桌面數據
到目前為止,這是我要確保互聯網可用時確保數據同步的目的。

在此處輸入圖片說明 我的方向正確嗎?
如果沒有,我希望你們能以正確的方式使我以專業的方式實現我的目標。
關於此類主題的任何鏈接將不勝感激。

在這種情況下,有用的模式是假定默認情況下發送數據是異步的。 收集后的數據將存儲在某個中間結構中,並等待適當的時間發送。 我認為該隊列可能有用,因為它可以與數據庫一起后端,並防止在發送服務器故障的情況下丟失數據。 單獨的線程(例如,作業)檢查隊列中的數據,如果存在,則讀取它們並嘗試發送。 如果正確執行了發送,則數據將從隊列中刪除。 如果發生故障,數據將保留在隊列中,並嘗試下一次發送它們。

當您要向事務中的非事務外部系統發送消息並且需要保證數據將盡快傳輸到外部系統而不會丟失時,這是典型的情況。

我想到了2個解決方案,也許第二個更適合您的體系結構。

用例1)

您可以將郵件隊列+重新發送限制設置與死信模式一起使用。 在這種情況下,您需要有一台應用服務器。

在這里,您可以閱讀有關死信模式的詳細信息。

文檔說明了重新交付限制如何在Weblogic服務器上工作。

用例2)

您可以在destop應用程序的數據庫中創建接口表。 然后將原始數據插入數據庫,並將新記錄也插入接口表(所有記錄都在同一事務中)。 您想要發布的數據也需要插入接口表中。 在接口表中新記錄的狀態位可以“ 到達 ”。 然后在桌面應用程序中創建一個獨立的計時器,該計時器會定期搜索狀態為“已收到 ”的接口表中的記錄。 此計時器控制的過程將嘗試將數據發布到Web服務。 如果HTTP響應為200,則將記錄的狀態更新為“ SENT ”。

靴子可以像魅力一樣工作。

您可以通過多種方式解決它。 這里給出兩種方式:

1.您可以使用circuit breaker pattern 您可以從這里獲得有關它的鏈接

  1. 您可以使用JMS概念進行管理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM