【发布时间】:2016-03-30 22:17:43
【问题描述】:
我有一个传入数据流,它作为单独的消息发送到 RabbitMQ。
我想将这些发送到需要一批消息的服务。当我有一批 1000 条消息或 5 秒过期时,我需要将请求发送到服务。这可以使用 SimpleMessageListenerContainer 吗?
SimpleMessageListenerContainer 支持事务,但是这对 5 秒超时没有帮助。我确实查看了方法 doReceiveAndExecute(BlockingQueueConsumer consumer) 和“receiveTimeout”,但由于这个变量在事务循环中,我最终可能会等待每条消息 5 秒(1000*5 秒= 83 分钟)。
我目前有一个通道感知侦听器,它将消息批处理到一个批量处理器中,该处理器将管理我的超时和队列长度。 SimpleMessageListenerContainer 设置为手动确认。但是,由于侦听器在消息实际发送到服务之前返回,当我在通道关闭时确认消息时偶尔会遇到问题。
我曾考虑编写自己的 ListenerContainer,将整个 BlockingQueueConsumer 发送到 Listener。这是唯一的解决方案还是有人已经设法做类似的事情?
【问题讨论】:
标签: java spring rabbitmq spring-amqp spring-rabbit