1

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

  • 使用 MQ 队列(发生错误时,在拒绝队列中插入一条消息并稍后重播)

  • 使用数据库来存储失败的情况,并在以后转一个批次来重播它们。

技术环境是Java(jdlk 8 + wildfly + REST web services作为中间件入口)

您能否通过比较两种技术的优缺点来指导我,如果有更好的解决方案,将受到欢迎。

在此先感谢您的帮助。

4

1 回答 1

2

在这种情况下,我的首选是选项 1。我的理由是:

  1. 不需要额外的数据库和它所需要的维护(更新模式、编写代码来写入和读取消息)。
  2. 您提到使用 MQ 文件,因此我假设您已经在使用消息队列,如果您使用的是 RabbitMQ 之类的服务总线,它可以自动为您将失败路由到失败的队列。
  3. 您可以稍后为队列启动多个竞争消费者,这在清除大型队列时会更快(即更好的扩展能力)。批处理可能是一个单一的顺序过程,一个接一个地搅动消息(当然这取决于您的实现,但很典型)。

此外,如果 REST 服务暂时繁忙,您始终可以对初始请求实施重试机制,以使其有更好的成功机会,然后在重试尝试失败时将其放入队列以供稍后处理。尝试查看类似Spring retry的内容

于 2018-01-31T12:18:40.197 回答