gpt4 book ai didi

java - 在 PUB/SUB 模型中消费来自 RabbitMQ 的消息

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:23 24 4
gpt4 key购买 nike

在我的项目中,我有一个要求,比如不同的方法将 SQL 查询推送到 Rabbit 队列(基本上是一个将消息广播到所有队列的交换器)。与生产相比,这些推送到队列的 SQL 查询此时并不是很重要(主要用于报告目的),因此当我服务器上没有太多负载时,我将在不同的环境(其他一些独立项目)中执行这些查询。

现在让我们进入故事的第二部分,在另一侧的独立应用程序中,有 2 个消费者使用来自 RabbitMQ(交换)的消息(SQL 查询)。一个使用者始终记录日志(例如查询备份),而其他使用者则在数据库上执行批量更新/插入。

我的问题是实现此用例的好方法是什么,当少数查询可能由于多种原因而失败时,并且由于它是批处理操作,整个批处理将回滚,并且我无法再次从队列中获取这些查询,因为它们已经被消耗了。我知道我必须从第二个消费者创建的备份中获取它,但是在出现任何异常后我必须停止第一个消费者,以及从备份日志中获取特定失败查询的好方法是什么(考虑查询的缺失,我正在考虑对多个日志文件使用滚动附加日志)。感谢您耐心理解我的问题,并请提出解决此问题的好方法。

最佳答案

尝试对消费者端可能发生的故障进行分类。可能有

  • 永久性错误(例如无效的 SQL 语句)和
  • 临时错误(网络故障、数据库服务器消失/重新启动...)等。

对于临时错误,只需重试消息的处理(请参阅 spring 的重试库)。导致永久性错误的消息可能会进入无效信件队列以进行进一步分析/报告(在重新路由之前将异常作为 header 添加到消息中)

关于java - 在 PUB/SUB 模型中消费来自 RabbitMQ 的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28284908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com