Spring AMQP 报告
Spring AMQP Reporting
我们正在使用 spring AMQP 来监听 rabbitMQ 的消息。我希望能够在处理完一批消息后报告指标,这意味着当我们耗尽队列中的所有消息时。我不确定如何在 Spring AMQP 中做到这一点。浏览 spring 文档,它提到了到 SimpleRabbitListenerContainerFactory 的建议链,但这主要是针对 RetryInterceptor。反正有没有让我报告?
框架中没有任何内容可以通知侦听器没有可用的新消息。
您可以使用 rabbitadmin 检查队列以查看消息计数,但在每次传递消息时都这样做会很昂贵。
一些想法:
您可以将任务安排到 运行 一段时间后没有收到任何消息(并且 cancel/reschedule 每次收到新消息时)。
您可以让发送系统向 "last" 消息添加一个标记,以便接收方知道批处理已完成。
不使用消息侦听器容器,而是使用 RabbitTemplate.receive()
(或 receiveAndConvert()
),默认情况下,当队列中没有消息时,returns null
.循环调用它们,直到没有消息为止。发生这种情况时,发布您的报告,然后进入轮询循环(睡眠)以轮询下一个 "batch".
我们正在使用 spring AMQP 来监听 rabbitMQ 的消息。我希望能够在处理完一批消息后报告指标,这意味着当我们耗尽队列中的所有消息时。我不确定如何在 Spring AMQP 中做到这一点。浏览 spring 文档,它提到了到 SimpleRabbitListenerContainerFactory 的建议链,但这主要是针对 RetryInterceptor。反正有没有让我报告?
框架中没有任何内容可以通知侦听器没有可用的新消息。
您可以使用 rabbitadmin 检查队列以查看消息计数,但在每次传递消息时都这样做会很昂贵。
一些想法:
您可以将任务安排到 运行 一段时间后没有收到任何消息(并且 cancel/reschedule 每次收到新消息时)。
您可以让发送系统向 "last" 消息添加一个标记,以便接收方知道批处理已完成。
不使用消息侦听器容器,而是使用 RabbitTemplate.receive()
(或 receiveAndConvert()
),默认情况下,当队列中没有消息时,returns null
.循环调用它们,直到没有消息为止。发生这种情况时,发布您的报告,然后进入轮询循环(睡眠)以轮询下一个 "batch".