Java 在发布/订阅模型中使用来自RabbitMQ的消息

Java 在发布/订阅模型中使用来自RabbitMQ的消息,java,jakarta-ee,log4j,rabbitmq,spring-rabbit,Java,Jakarta Ee,Log4j,Rabbitmq,Spring Rabbit,在我的项目中,我有一个需求,比如不同的方法将sql查询推送到兔子队列(基本上是一个将消息广播到所有队列的交换)。与生产环境相比,这些推送到队列中的SQL查询在此时并不重要(基本上用于报告目的),所以我将在服务器上没有太多负载的情况下,在不同的环境(一些其他独立项目)中执行这些查询 现在让我们进入故事的第二部分,在另一端的独立应用程序中,有两个使用者使用来自RabbitMQ(exchange)的消息(SQL查询)。一个使用者总是记录日志(如查询备份),另一个使用者对数据库执行批更新/插入 我的问题

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

现在让我们进入故事的第二部分,在另一端的独立应用程序中,有两个使用者使用来自RabbitMQ(exchange)的消息(SQL查询)。一个使用者总是记录日志(如查询备份),另一个使用者对数据库执行批更新/插入


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

尝试对可能发生在用户端的故障进行分类。可能有

  • 永久性错误(例如无效的SQL语句)和
  • 临时错误(网络故障、数据库服务器丢失/重新启动等)
对于临时错误,只需重试消息处理(请参阅spring的重试库)。
导致永久性错误的邮件可能会进入
无效信件队列
进行进一步分析/报告(在重新路由前将异常添加为邮件标题)

请添加更多说明;根本不清楚你想做什么。默认情况下,被拒绝的邮件(由于失败)将被重新查询。@GaryRussell我不想重新查询失败的邮件,我想在遇到问题时暂停消费,我会向相关人员发送邮件,以便他们手动修复。完成该过程后,我必须再次恢复队列消耗。@prathap请告诉我您的联系电话。如果可能,请拨打+919959900609与我联系