Java:互联网中断时在线更新数据的最佳实践

时间:2018-07-27 08:39:46

标签: java data-synchronization


我有2个应用程序:

  • 桌面(java)
  • 网络(symfony)

我的桌面应用程序中有一些数据必须与Web应用程序中的数据保持一致。
因此,基本上,我从桌面应用向网络应用发送了POST请求,以更新在线数据。

但是问题是,当我发送请求时,互联网不能总是可用,同时我不能阻止用户更新桌面数据
到目前为止,这是我要确保互联网可用时确保数据同步的目的。

enter image description here 我的方向正确吗?
如果没有,我希望你们能以正确的方式使我以专业的方式实现我的目标。
关于此类主题的任何链接将不胜感激。

3 个答案:

答案 0 :(得分:1)

在这种情况下,有用的模式是假定默认情况下发送数据是异步的。收集后的数据将存储在某个中间结构中,并等待适当的时间发送。我认为该队列可能有用,因为它可以与数据库一起后端,并防止在发送服务器故障的情况下丢失数据。单独的线程(例如作业)检查队列中的数据,如果存在,则读取它们并尝试发送。如果正确执行了发送,则数据将从队列中删除。如果发生故障,数据将保留在队列中,并尝试下一次发送它们。

答案 1 :(得分:0)

当您想在事务中向非事务性外部系统发送消息,并且需要保证数据将尽快传输到外部系统而不会丢失时,这是一种典型情况。

我想到了2种解决方案,也许第二种更适合您的体系结构。

用例1)

您可以将邮件队列+重新发送限制设置与死信模式一起使用。在这种情况下,您需要有一台应用服务器。

Here,您可以阅读有关死信模式的详细信息。

This文档介绍了重新交付限制在Weblogic服务器上的工作方式。

用例2)

您可以在destop应用程序的数据库中创建接口表。然后将原始数据插入数据库,并将新记录也插入接口表(所有记录都在同一事务中)。您想要发布的数据也需要插入接口表中。接口表中新记录的状态标志可以是“ ARRIVED ”。然后在您的桌面应用中创建一个独立的计时器,该计时器会定期在界面表中搜索状态为“ ARRIVED ”的记录。此计时器控制的过程将尝试将数据发布到Web服务。如果HTTP响应为200,则将记录的状态更新为“ SENT ”。

引导可以像护身符一样工作。

答案 2 :(得分:0)

您可以通过多种方式解决它。这里给出两种方式:

1。您可以使用circuit breaker pattern。您可以从here

获取有关它的链接
  1. 您可以使用JMS概念进行管理。