Java 如何使用spring框架接收所有预取rabbitmq消息?
我正在学习如何使用SimpleMessageListenerContainer接收rabbitmq消息。我的侦听器容器的预取计数为1000。但是,我的listener worker实现了MessageListener接口,它一次只接收一条消息。是否有接收消息列表的接口?如果没有,如何接收邮件列表?我不想一次只处理一条消息,而是一个消息列表,这样我就可以进行批量插入/更新。我还想对发送给我的所有邮件进行一次确认 谢谢Java 如何使用spring框架接收所有预取rabbitmq消息?,java,spring,rabbitmq,spring-jms,Java,Spring,Rabbitmq,Spring Jms,我正在学习如何使用SimpleMessageListenerContainer接收rabbitmq消息。我的侦听器容器的预取计数为1000。但是,我的listener worker实现了MessageListener接口,它一次只接收一条消息。是否有接收消息列表的接口?如果没有,如何接收邮件列表?我不想一次只处理一条消息,而是一个消息列表,这样我就可以进行批量插入/更新。我还想对发送给我的所有邮件进行一次确认 谢谢 肖恩·阮没有这样的API;即使是低级的rabbit客户端消费者也会一次一条地传递
肖恩·阮没有这样的API;即使是低级的rabbit客户端消费者也会一次一条地传递每个预取的消息(通过
handleDelivery
)
你必须自己将它们累积到一个列表中
使用
txSize
属性(将其设置为与预取相同)在1000次交付后发送一个ack。是否有方法知道我收到的第n条消息,以便如果第n==1000,我可以确认它?如果使用txSize=1000
容器将在1000次之后确认;如果您想确认自己,请使用ChannelAwareMessageListener
,将确认模式设置为MANUAL
(而不是默认的AUTO
),并在频道上发出basicAck
(使用message.gertMessageProperties().getDeliveryTag()
)并使用deliveryTag frommessage.gertMessageProperties().getDeliveryTag()。@Gary:我也有类似的情况。我知道这是一种非常规的用法,但我的侦听器调用了第三方服务,如果我传递字符串连接N(比如10)个消息(json)体,它的性能会更好。您建议在列表中使用txSize和CUMENTARY。但我不知道该怎么做。我可以使用自动集装箱确认。我应该使用什么样的侦听器?我正在使用“@Bean public MessageListener MessageListener(){return new MessageListener(){public void onMessage(Message Message){….}”将消息累积到消息侦听器中的线程安全集合中,然后当达到所需数量时,将它们全部发送到下一个阶段。该阶段完成后,将发送ack(只要txSize与集合大小匹配)。