在PUB / SUB模型中使用来自RabbitMQ的消息

时间:2015-02-02 19:07:33

标签: java java-ee log4j rabbitmq spring-rabbit

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

对于临时错误,只需重试消息处理(参见spring的重试库)。 导致永久性错误的消息可能会进入invalid letter queue进行进一步分析/报告(在重新路由之前将异常添加为消息标题)