Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用spring框架接收所有预取rabbitmq消息?_Java_Spring_Rabbitmq_Spring Jms - Fatal编程技术网

Java 如何使用spring框架接收所有预取rabbitmq消息?

Java 如何使用spring框架接收所有预取rabbitmq消息?,java,spring,rabbitmq,spring-jms,Java,Spring,Rabbitmq,Spring Jms,我正在学习如何使用SimpleMessageListenerContainer接收rabbitmq消息。我的侦听器容器的预取计数为1000。但是,我的listener worker实现了MessageListener接口,它一次只接收一条消息。是否有接收消息列表的接口?如果没有,如何接收邮件列表?我不想一次只处理一条消息,而是一个消息列表,这样我就可以进行批量插入/更新。我还想对发送给我的所有邮件进行一次确认 谢谢 肖恩·阮没有这样的API;即使是低级的rabbit客户端消费者也会一次一条地传递

我正在学习如何使用SimpleMessageListenerContainer接收rabbitmq消息。我的侦听器容器的预取计数为1000。但是,我的listener worker实现了MessageListener接口,它一次只接收一条消息。是否有接收消息列表的接口?如果没有,如何接收邮件列表?我不想一次只处理一条消息,而是一个消息列表,这样我就可以进行批量插入/更新。我还想对发送给我的所有邮件进行一次确认

谢谢


肖恩·阮

没有这样的API;即使是低级的rabbit客户端消费者也会一次一条地传递每个预取的消息(通过
handleDelivery

你必须自己将它们累积到一个列表中


使用
txSize
属性(将其设置为与预取相同)在1000次交付后发送一个ack。

是否有方法知道我收到的第n条消息,以便如果第n==1000,我可以确认它?如果使用
txSize=1000
容器将在1000次之后确认;如果您想确认自己,请使用
ChannelAwareMessageListener
,将确认模式设置为
MANUAL
(而不是默认的
AUTO
),并在频道上发出
basicAck
(使用
message.gertMessageProperties().getDeliveryTag()
)并使用deliveryTag from
message.gertMessageProperties().getDeliveryTag()。@Gary:我也有类似的情况。我知道这是一种非常规的用法,但我的侦听器调用了第三方服务,如果我传递字符串连接N(比如10)个消息(json)体,它的性能会更好。您建议在列表中使用txSize和CUMENTARY。但我不知道该怎么做。我可以使用自动集装箱确认。我应该使用什么样的侦听器?我正在使用“@Bean public MessageListener MessageListener(){return new MessageListener(){public void onMessage(Message Message){….}”将消息累积到消息侦听器中的线程安全集合中,然后当达到所需数量时,将它们全部发送到下一个阶段。该阶段完成后,将发送ack(只要txSize与集合大小匹配)。