java - 无法在 JMS 中正确创建消息选择器

标签 java jms activemq message-queue stomp

我可以从服务器检索一些数据,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response>
    <responseMetadata>
        <httpCode>200</httpCode>
        <errorType>Ok</errorType>
        <description>Success</description>
        <cappingLimit>333</cappingLimit>
        <queryString>........</queryString>
    </responseMetadata>
    <responseHeader>
        <recordType>some record type long</recordType>
        <fileType>my_file_type</fileType>
    </responseHeader>
    <responseBody>
        <responseList>
            <item>
                <recordType>some record type short</recordType>
                <header2>fdsfdsfds</header2>
                <header3>fdsfdsssfds</header3>
                <header4>fdsfd2222sfds</header4>
            </item>

它还有推送 STOMP 服务。我希望能够通过它接收相同的数据。 但不是默认发送的所有数据,而是仅发送具有

的数据

“recordType” = header 中的某些记录类型为长,或者正文中的“某些记录类型为短”,两者相同。不过,我认为不允许按 body 过滤。

如何正确过滤它?我知道我必须使用

messageConsumer = session.createConsumer(topic, "recordType='some record type long'");


// or
messageConsumer = session.createConsumer(topic, "recordType='some record type short'"); // not allowed?

无论如何,这并没有奏效。也许选择器是错误的?这里描述了如何创建一个https://www-01.ibm.com/support/knowledgecenter/api/content/nl/en-us/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q031980_.htm#q031980_ 但我应该如何在我的特定情况下创建它?什么是 JMSType?

附注我的应用程序是消费者,而不是消息的生产者。

最佳答案

正如与您的问题链接的文档中所述,JMS 选择器使用 JMS 标准或用户属性...而不是消息负载的内容...

如果您想根据“recordType”“选择”消息,则必须将“recordType”作为属性添加到消息中

关于java - 无法在 JMS 中正确创建消息选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35092012/

相关文章:

java - 无法在 IntelliJ 中导入 java.util.Calendar

java - A JMS-Queue-Factory-Bean --> 在不同的 bean 中重用注入(inject)的 jms 队列

jms - JMS中基于定义时间的消息调度/消费

java - MessageDrivenBean 两次使用 JMS 消息

java - 如何使用 Spring JmsListener 手动确认来自 ActiveMQ 的消息

java - HSQLDB登录认证问题

java - 在使用 java 的 ARCore 中,如何在我的世界中绘制 3D 三角形/线

java - Java For Each 语句中的 Cast 元素

java - 使用 WebSphere MQ v7.0 找不到 SYSTEM.BROKER 服务

java - 无法让 ActiveMQ 重新发送我的消息