有没有一种使用Spring排队REST调用的方法?

3
我正在开发一个项目,该项目向另一个服务进行REST调用以将数据保存到数据库中。这些数据非常重要,我们不能承受任何丢失。
如果网络出现问题,这个消息将会丢失,这是不能接受的。我已经搜索了Spring Retry,并且发现它是用于处理临时网络故障的,这不是我需要的。
我需要一种方法将REST调用放入某种队列(如Active MQ)中,并保留顺序(这非常重要,因为我接收到保存、删除和更新REST调用)。
有什么想法吗?谢谢。

ActiveMQ有什么问题?为什么不能使用它? - undefined
我们正在探索使用REST调用的方式,这是由于公司内部的许多原因。除非没有其他选择,否则在这个项目中不能使用ActiveMQ。 - undefined
使用像activeMQ这样的外部代理是做这个最有效和安全的方式,你可以在不影响其他服务的情况下进行扩展和高可用性。这就是它的美妙之处。一旦你收到将消息存储在队列中的确认,你可以确定它在那里。但要确保它在磁盘上持久化,以避免任何丢失。 - undefined
2个回答

0

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

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

如果您必须重新发明轮子,请查看这个主题,它讨论了使用Executors和BlockingQueue来实现自己的伪消息队列。 Producer/Consumer threads using a Queue.

另外,重试机制不是由消息队列代理提供的,而是由客户端实现的。无论是ActiveMQ捆绑的客户端库还是其他消息传递库(如Camel)。

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


0

让您的服务保持自己内部的作业队列,并且只有在前一个 REST 调用返回成功代码后才继续进行下一个调用。

有很多更好的方法来实现这一点,但限制将取决于您的公司允许您做什么。


你能举个例子来说明如何实现这一点吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接