JMS消息选择器是否通过单个consumer.receive()调用或它看到的第一条消息来删除多个消息?

时间:2017-09-26 20:40:16

标签: 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也会将单个消息拉下来。

2 个答案:

答案 0 :(得分:2)

MessageConsumer的文档说明如下:

  

接收在指定超时内到达的下一条消息   间隔。

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

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

答案 1 :(得分:1)

没有指定实际的JMS提供者客户端如何在内部工作:这取决于提供者;但它只能一条消息返回给调用者。