我正在做一个项目,该项目正在对另一个服务进行REST调用,以将数据保存在数据库中。数据非常重要,因此我们无法承受任何损失。
如果网络中存在问题,此消息将丢失,这不会发生。我已经搜索过有关Spring Retry的信息,并且看到它旨在处理临时的网络故障,这不是我所需要的。
我需要一种将REST调用放入某种队列(如Active MQ)并保留顺序的方法(这很重要,因为我收到了Save,Delete和Update REST调用。)
有任何想法吗?谢谢。
最佳答案
如果不需要独立安装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捆绑的客户端库还是其他消息传递库(例如Camel)。
您还可以回顾当前的技术堆栈,以查看是否有任何现有组件具有JMS功能。例如:Oracle数据库捆绑了一个称为Oracle AQ的MQ。