我正在开发一个项目,该项目正在对另一个服务进行 REST 调用以将数据保存在数据库中。数据非常重要,因此我们不能承受丢失任何东西。
如果网络出现问题,此消息将丢失,这是不可能发生的。我已经搜索过 Spring Retry,发现它旨在处理临时网络故障,这不是我所需要的。
我需要一种将 REST 调用放入某种队列(如 Active MQ)并保留顺序的方法(这非常重要,因为我收到了保存、删除和更新 REST 调用。)
有任何想法吗?谢谢。
我正在开发一个项目,该项目正在对另一个服务进行 REST 调用以将数据保存在数据库中。数据非常重要,因此我们不能承受丢失任何东西。
如果网络出现问题,此消息将丢失,这是不可能发生的。我已经搜索过 Spring Retry,发现它旨在处理临时网络故障,这不是我所需要的。
我需要一种将 REST 调用放入某种队列(如 Active MQ)并保留顺序的方法(这非常重要,因为我收到了保存、删除和更新 REST 调用。)
有任何想法吗?谢谢。
让您的服务保留自己的内部作业队列,并且只移动到下一个 REST 调用,直到前一个返回成功代码。
有很多更好的方法可以做到这一点,但限制将归结为您的公司允许您做什么。
如果不需要独立安装 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