java - JMS 消息选择器是否通过单个 Consumer.receive() 调用或它看到的第一条消息拉取多条消息?

标签 java jms ibm-mq

我目前正在使用 IBM MQ JMS 库并编写一个 Java 类,该类将使用如下选择器处理从消费队列中拉取消息:

consumer = session.createConsumer(queue, "JMSCorrelationID = '" + request.getCorrelationID() + "'");
message = consumer.receive(30000);

我的问题是,如果消费队列中有两条消息与消息选择器匹配,那么调用consumer.receive会拉下这两条消息还是只会拉下它看到的第一条消息?

我发现了另一个问题: How to remove multiple messages using message selector in JMS这似乎暗示了这样一个事实:即使消费队列中的两条消息与选择器匹配,调用 receive 也会拉下一条消息。

最佳答案

MessageConsumer 的文档说明如下:

Receives the next message that arrives within the specified timeout interval.

https://docs.oracle.com/javaee/7/api/javax/jms/MessageConsumer.html

因此调用 receive 应该一次拉下 1 条消息。它不能真正返回更多消息,因为返回类型是 Message 而不是任何类型的集合。

关于java - JMS 消息选择器是否通过单个 Consumer.receive() 调用或它看到的第一条消息拉取多条消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46435439/

相关文章:

spring - 单点对点队列和多个监听器

java - WebSphere MQ 配置问题

java - 将文本文件从大型机发送到 IBM MQ

java - 从 -D 变量设置 Spring 单元测试配置文件

java - Liferay 请求当前页面名称

jms - 选择性出队的消息是否保持 FIFO 顺序 (MQ)?

ssl - 如何为 tibco JMS ssl 配置水槽

Java - 将对象设置为 null

java - 实现可导航图的优雅方式?

java - JMS - 即使与远程提供程序的连接正常,也无法创建 session 工厂