有没有办法使用Spring进行队列REST调用?

时间:2017-08-07 14:28:40

标签: java rest queue spring-rest spring-retry

我正在开发一个项目,该项目正在对另一个服务进行REST调用,以便在数据库上保存DATA。数据非常重要,因此我们无法承受任何损失。

如果网络出现问题,此消息将丢失,但这不会发生。我已经搜索了Spring Retry,我发现它是为处理临时网络故障而设计的,这不是我需要的。

我需要一种方法将REST调用放在某种Queue(如Active MQ)中并保留顺序(这非常重要,因为我收到了Save,Delete和Update REST调用。)

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分: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代理提供的东西。它是实现它的客户端。无论是ActiveMQs捆绑的客户端库还是其他Messaging库,例如Camel。

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

答案 1 :(得分:0)

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

有很多更好的方法可以做到这一点,但限制将取决于贵公司允许你做什么。