【问题标题】:Does a JMS message selector pull multiple messages down with a single consumer.receive() call or the first message it sees?JMS 消息选择器是否通过单个 consumer.receive() 调用或它看到的第一条消息拉下多条消息?
【发布时间】:2017-09-27 08:53:54
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java jms ibm-mq


    【解决方案1】:

    MessageConsumer 的文档说明如下:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-08
        • 2014-02-27
        • 1970-01-01
        • 2021-10-15
        • 2014-05-06
        • 2012-11-26
        • 2015-06-16
        • 1970-01-01
        相关资源
        最近更新 更多