2017-08-07 33 views
1

我正在對另一個服務進行REST調用以保存數據庫上的項目。數據非常重要,所以我們不能承受任何損失。有沒有辦法與Spring隊列REST調用?

如果網絡出現問題,此消息將會丟失,而這種情況不會發生。我已經搜索了關於Spring Retry的信息,並且我看到它旨在處理暫時的網絡故障,這不是我所需要的。

我需要一種方法把某種隊列(如Active MQ)的REST調用和維護秩序(因爲我得到保存,刪除,這是非常重要的,更新REST調用。)

任何想法?謝謝。

+0

ActiveMQ有什麼問題?你爲什麼不能使用它? – StanislavL

+0

由於公司的內部原因,我們正在探索一種使用REST調用的方法,除非沒有其他選項,否則ActiveMQ不能用於此項目。 –

+0

使用像activeMQ這樣的外部代理是這樣做的最有效和最安全的方式,您可以在不影響其他服務的情況下擴展並使其高度可用。這是它的美麗。一旦你收到隊列中消息的存儲確認,你可以確定它在那裏。但要確保其在磁盤上的存在以避免任何損失 – nafas

回答

0

如果不希望單獨安裝ActiveMQ,則可以使用嵌入式內存代理。 http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html

不確定您是否可以配置內存代理以使用KahaDB。當然,持久性的範圍將僅限於您的應用程序進程,即如果應用程序重新啓動,隊列中的消息將不可用。這可能是基於內存或基於代碼的方法不好的最重要的原因。

如果你必須重新發明輪子,那麼看看這個主題,它討論了使用Executors和BlockingQueue來實現你自己的僞MQ。 Producer/Consumer threads using a Queue

在附註中,重試機制不是由MQ代理提供的。它是實現它的客戶端。無論是ActiveMQ捆綁客戶端庫或其他消息庫,如駱駝。

您也可以回顧您當前的技術堆棧以查看是否有任何現有組件具有JMS功能。例如:Oracle數據庫捆綁稱爲Oracle AQ的MQ

0

讓服務保持工作自身的內部隊列,只有進入下一個REST調用,直到前一個返回成功代碼。

有很多更好的方法來做到這一點,但限制將歸結於貴公司可以讓你做的事情。

相關問題