我正在开发一个项目,该项目正在对另一个服务进行 REST 调用以将数据保存在数据库上。数据非常重要,因此我们不能失去任何东西。
如果网络出现问题,此消息将会丢失,但这是不可能发生的。我已经搜索过 Spring Retry,发现它是为了处理临时网络故障而设计的,这不是我所需要的。
我需要一种方法将 REST 调用放入某种队列(如 Active MQ)中并保留顺序(这非常重要,因为我收到保存、删除和更新 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
关于java - 有没有办法用 Spring 将 REST 调用排队?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45549378/