Spring Integration配置RabbitMQ按间隔读队列消息不生效求助
配置失效原因
你使用的SimpleMessageListenerContainer属于推模式消费容器:RabbitMQ服务端会主动将队列中存在的消息实时推送给已注册的消费者,这一逻辑不受receiveTimeout参数控制。
你查到的receiveTimeout参数是给拉模式的AmqpTemplate.receive()方法使用的,在推模式容器中该参数仅控制消费者线程空闲时的内部等待超时,和消息拉取间隔完全无关,因此无法实现每15分钟读取一次的需求。
消费者单次活跃时长
SimpleMessageListenerContainer采用长连接常驻机制,消费者启动后会一直和RabbitMQ服务端保持连接,只要容器不停止,消费者会持续处于活跃状态接收推送消息。
后续方案说明
你后续使用Amqp.inboundPolledAdapter的方案是正确的,这是Spring Integration提供的拉模式消费适配器,可以通过轮询配置实现按间隔读取消息的需求:
- 你当前配置的是每20秒触发一次轮询,每次轮询拉取队列中所有消息(
maxMessagesPerPoll(-1)),如果要改成15分钟间隔,只需要将Pollers.fixedDelay(20_000)修改为Pollers.fixedDelay(900_000)即可。 - 如果需要控制每次轮询拉取的消息数量,将
maxMessagesPerPoll修改为对应数值即可,比如设为1代表每次轮询最多拉1条消息。
内容的提问来源于stack exchange,提问作者Sanal M
相关产品推荐
相关产品推荐

