2017-08-07 111 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调用,直到前一个返回成功代码。

有很多更好的方法来做到这一点,但限制将归结于贵公司可以让你做的事情。

相关问题