【问题标题】:MQ queues vs Batch process : how to replay asynchronous process when it failsMQ 队列 vs 批处理:异步进程失败时如何重播
【发布时间】:2018-07-10 12:45:06
【问题描述】:

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

  • 使用 MQ 队列(出错时,在拒绝队列中插入消息,稍后重播)

  • 使用数据库来存储失败的案例,并在以后转一个批次进行回放。

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

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

提前感谢您的帮助。

【问题讨论】:

    标签: java asynchronous batch-processing middleware mqueue


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您抽出宝贵时间回复我。
    【解决方案2】:

    感谢您抽出宝贵时间回复我。

    事实上,我已经将 IBM MQ 用于旧应用程序,但根据经验,在生产环境中维护是非常明智的,特别是在开始重放过程之前调查错误的根本原因。

    这就是为什么我说可能使用数据库将提供更清晰的愿景(用于调查和监控不同可能的错误原因)。

    出于表演的原因,我也完全同意你。

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      相关资源
      最近更新 更多