繁体   English   中英

尝试使用 Java (JMS) 中的选择器在 Tibco EMS 上使用持久消息时遇到问题

[英]Trouble trying to consume persistent messages on Tibco EMS with selectors in Java (JMS)

所以我试图通过带有消息 ID 选择器的 JMS 使用来自 Tibco EMS 代理的消息。 如果消息是 NON_PERSISTENT,我可以通过它们的 JMSMessageID 来选择它们,并且一切正常。

如果消息是持久的,则选择器不会检索任何内容。 我已经在 Apache ActiveMQ 上尝试了相同的代码,它在两种情况下都有效。 我已经通过了 EMS 样品,但看不到任何明显的东西。 想知道是否有一些 EMS 设置可能会影响此...

如果我省略了选择器,那么无论 DeliveryMode 是什么,消息都会被正确使用。

这是我用来重现它的内容。

任何帮助将非常感激 :)

package com;

import javax.jms.*;
import com.tibco.tibjms.TibjmsConnectionFactory;

public class JMSTest {
    String msgIdPersistent = "";
    String msgIdNon_Persistent = "";
    String serverUrl = "tcp://localhost:7222";
    String queueName = "test";

    public static void main(String[] args) {
        JMSTest test = new JMSTest();
        try {
            test.publish();
            test.deleteBySelector();
        }catch(Exception ex) {
            ex.printStackTrace();
        }
    }

    public void deleteBySelector() throws Exception {
        // Create connection and session
        ConnectionFactory factory = new TibjmsConnectionFactory(serverUrl);
        Connection connection = factory.createConnection();
        connection.start();
        Session session = connection.createSession();

        // Delete non-persistent
        //
        String selectorNonPersist  = "JMSMessageID='" + msgIdNon_Persistent + "'";
        MessageConsumer nonPersistReceiver = session.createConsumer(session.createQueue(queueName), selectorNonPersist);
        Message nonPersistMsg = null;
        nonPersistMsg = nonPersistReceiver.receive(1000);
        System.out.println("NON PERSISTENT SELECTOR:  " + ((nonPersistMsg!=null) ? "SUCCESS" : "FAIL"));

        // Delete Persistent - **** THIS DOESN'T WORK *****
        //
        String selectorPersist  = "JMSMessageID='" + msgIdPersistent + "'";
        MessageConsumer persistReceiver = session.createConsumer(session.createQueue(queueName), selectorPersist);
        Message persistMsg = null;
        persistMsg = persistReceiver.receive(1000);
        System.out.println("PERSISTENT SELECTOR:  " + ((persistMsg!=null) ? "SUCCESS" : "FAIL"));   
    }

    public void publish() throws Exception {
        ConnectionFactory factory = new com.tibco.tibjms.TibjmsConnectionFactory(serverUrl);
        Connection connection = factory.createConnection();
        connection.start();
        Session session = connection.createSession(javax.jms.Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("test");

        // Send persistent message
        //
        System.out.println("Persistent publish");
        MessageProducer producerPersistent = session.createProducer(null);
        producerPersistent.setDeliveryMode(DeliveryMode.PERSISTENT);
        TextMessage messagePersistent = session.createTextMessage("PERSISTENT");
        producerPersistent.send(destination, messagePersistent);
        msgIdPersistent = messagePersistent.getJMSMessageID();
        System.out.println("\tMsgId=" + msgIdPersistent);

        // Send Non Persistent message
        //
        System.out.println("NON Persistent publish");
        MessageProducer producernonPersistent = session.createProducer(destination);
        producernonPersistent.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        TextMessage messageNonPersistent = session.createTextMessage("NON_PERSISTENT");
        producernonPersistent.send(messageNonPersistent);
        msgIdNon_Persistent = messageNonPersistent.getJMSMessageID();
        System.out.println("\tMsgId=" + msgIdNon_Persistent);

        // Clean up
        session.close();
        connection.close();

        System.out.println("Done publish\n");
    }
}

我从中得到的输出是:

    Persistent publish
        MsgId=ID:EMS-SERVER.3D856ECE827932:1
    NON Persistent publish
        MsgId=ID:EMS-SERVER.3D856ECE827932:2
    Done publish

    NON PERSISTENT SELECTOR:  SUCCESS
    PERSISTENT SELECTOR:  FAIL

我已经确认它是 8.2.x 中的一个错误。 我升级到 8.3.x 并且运行良好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM