作为中间件开发的一部分,我需要在两种机制之间进行选择以进行异步处理(可能会重播失败的案例)
我有以下两种技术的想法:


使用MQ队列(发生错误时,在拒绝队列中插入一条消息,然后稍后重播)
使用数据库存储失败的案例,然后批量处理以稍后重播。


技术环境是Java(jdlk 8 + wildfly + REST Web服务作为中间件入口点)

您能通过比较这两种技术的优点和缺点来确定我的方向吗,如果有更好的解决方案,欢迎您。

在此先感谢您的帮助。

最佳答案

在这种情况下,我倾向于选择选项1。我的原因是:


无需额外的数据库及其带来的维护(更新架构,编写代码以编写和读取消息)。
您提到使用MQ文件,因此,我假设您已经在使用消息队列,如果您正在使用服务总线(例如RabbitMQ),它将为您自动将故障路由到失败的队列。
您可以稍后增加多个竞争使用者以使用Queue,这在清除大型队列时会更快(即更好的可伸缩性)。批处理过程可能是单个顺序过程,一个接一个地搅动消息(当然,这取决于您的实现,但是很典型)。


此外,如果REST服务暂时繁忙,则可以始终对初始请求实施重试机制,以使其获得更大的成功机会,如果重试尝试以后无法处理,则将其放在队列中。尝试查看类似Spring retry的内容

08-05 19:18