1

我正在开发一个项目,该项目正在对另一个服务进行 REST 调用以将数据保存在数据库中。数据非常重要,因此我们不能承受丢失任何东西。

如果网络出现问题,此消息将丢失,这是不可能发生的。我已经搜索过 Spring Retry,发现它旨在处理临时网络故障,这不是我所需要的。

我需要一种将 REST 调用放入某种队列(如 Active MQ)并保留顺序的方法(这非常重要,因为我收到了保存、删除和更新 REST 调用。)

有任何想法吗?谢谢。

4

2 回答 2

0

让您的服务保留自己的内部作业队列,并且只移动到下一个 REST 调用,直到前一个返回成功代码。

有很多更好的方法可以做到这一点,但限制将归结为您的公司允许您做什么。

于 2017-08-19T21:18:18.470 回答
0

如果不需要独立安装 ActiveMQ,您可以使用嵌入式内存代理。 http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html

不确定您是否可以将内存代理配置为使用 KahaDB。当然,持久性的范围将仅限于您的应用程序进程,即如果重新启动应用程序,队列中的消息将不可用。这可能是内存或基于原始代码的方法不好的最重要原因。

如果你必须重新发明轮子,那么看看这个主题,它讨论了使用 Executors 和 BlockingQueue 来实现你自己的伪 MQ。 使用 Queue 的生产者/消费者线程

附带说明,重试机制不是 MQ 代理提供的。实现它的是客户端。无论是 ActiveMQs 捆绑客户端库还是其他消息传递库,例如 Camel。

您还可以回顾当前的技术堆栈,以查看是否有任何现有组件具有 JMS 功能。例如:Oracle 数据库捆绑了一个名为 Oracle AQ 的 MQ

于 2017-08-07T15:08:50.930 回答