【问题标题】:JMS Request Reply Pattern, No OutputJMS 请求回复模式,无输出
【发布时间】:2015-08-05 11:52:40
【问题描述】:

测试请求响应:

public static void main(String args[]) throws JMSException {
    TibjmsConnectionFactory connectionFactory = new TibjmsConnectionFactory(
            "tcp://localhost:7222");
    Connection con = connectionFactory.createConnection("admin", "");
    con.start();
    Session s = con.createSession();
    System.out.println("Successfully created JMS Connection and Session!");
    Queue q1 = s.createQueue("train.ems.queue.test");
    System.out.println(q1);
    System.out.println("Queue created!");
    TemporaryQueue tq = s.createTemporaryQueue();
    MessageProducer mp = s.createProducer(q1);
    MessageConsumer mc = s.createConsumer(tq);
    TextMessage tm = s.createTextMessage("Hi this is ABHISHEK!");
    tm.setStringProperty("Country", "IN");
    tm.setJMSCorrelationID("SENDER");
    tm.setJMSReplyTo(tq);
    mp.setTimeToLive(30000);
    mp.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
    mp.setPriority(Message.DEFAULT_PRIORITY);
    mp.send(tm);
    Message recv = mc.receive(60000);
    if (recv != null) {
        System.out.println(recv.getBody(String.class));
    }
    mp.close();
    s.close();
    con.close();

}

TestAsyncReceiveMessage:

public class TestAsyncReceiveMessage implements MessageListener {
Session s;
Queue q1;

MessageProducer mp;

public static void main(String ars[]) throws JMSException {
    TestAsyncReceiveMessage obj = new TestAsyncReceiveMessage();
    obj.createSession();
    obj.createQueue();
    obj.msgConsumer();

}

private void msgConsumer() throws JMSException {
    // TODO Auto-generated method stub
    MessageConsumer mc = s.createConsumer(q1, "Country='IN'");
    mc.setMessageListener(new TestAsyncReceiveMessage());
}

private void createQueue() throws JMSException {
    // TODO Auto-generated method stub
    q1 = s.createQueue("train.ems.queue.test");
    // t1=s.createTopic("train.ems.topic.test");
}

private void createSession() throws JMSException {
    // TODO Auto-generated method stub
    TibjmsConnectionFactory connectionFactory = new TibjmsConnectionFactory(
            "tcp://localhost:7222");
    Connection con = connectionFactory.createConnection("admin", "");
    s = con.createSession();
    System.out.println("Successfully created JMS Connection and Session!");

}

public void onMessage(Message arg0) {

    try {
        System.out.println(arg0.getBody(String.class));
        TextMessage tm = s.createTextMessage("ACk");
        Queue t = (Queue) arg0.getJMSReplyTo();
        mp = s.createProducer(t);
        mp.send(tm);
    } catch (JMSException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

首先它在 onMessage 中创建 TextMessage 时向我显示 NullPointerException,我更改了一些内容并且没有更多异常,但也没有 putput。帮助! :)

【问题讨论】:

    标签: request jms listener message reply


    【解决方案1】:

    TestAsyncReceiveMessage 代码中创建Connection.Start() 方法后,您还没有调用它。应用程序必须调用 Connection.Start() 来通知消息传递提供者开始传递消息。否则消息将不会传递给消费者。

    Connection.Start 通常在消费者创建之后调用,并且任何消息侦听器都附加到消费者,以便消费者准备好接收消息。

    【讨论】:

    • 我在创建会话方法中创建会话后添加了一个 con.start() 语句,我收到了原始消息,但在我创建 TextMessage 的行上得到了一个 NullPointerExceptiononMessage 方法中作为回复发送。泰@Shashi
    • 我除了缺少一个开始你的消息不是线程安全的。您不应将消息 Producer 存储在字段中,也不应将其关闭。会话字段未标记为瞬态,因此无法保证会话对另一个线程可见,这将导致空指针异常。
    猜你喜欢
    • 2011-05-21
    • 2012-12-01
    • 2014-11-08
    • 2012-07-30
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多