gpt4 book ai didi

java - 为什么这个 messageListener 不工作?

转载 作者:行者123 更新时间:2023-11-29 08:50:39 25 4
gpt4 key购买 nike

我正在使用 ActiveMQ。我的消费者代码是从 main 方法调用的。一旦主类终止,我希望 JMSMessageListener 已在队列中注册,并且每当“TestTopic”上有消息时,将调用 onMessage,但这并没有发生。

//JMS Consumer
public class JMSConsumer {
public void consume() {
String url = "tcp://localhost:61616";
ConnectionFactory factory = new ActiveMQConnectionFactory(url);
try {
Connection connection = factory.createConnection();
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("TestTopic");
MessageConsumer consumer = session.createConsumer(topic);
JMSMessageListener listener = new JMSMessageListener();
consumer.setMessageListener(listener);
connection.start();
} catch (JMSException exp) {}
}
}

//JMS Message Listener
public class JMSMessageListener implements MessageListener {
@Override
public void onMessage(javax.jms.Message msg) {
System.out.println(msg.toString());
}
}

这是不是因为主线程已经终止,监听器不活了?我认为使用 setMessageListener,上面的代码应该在内部创建一个应该始终运行的线程。

最佳答案

Is this because the main thread has been terminated and the listener is not live anymore? I thought with setMessageListener, the above code should internally create a thread that should always be running.

setMessageListener 不会创建新线程。当您从 Connection 创建新的 Session 时,会创建一个新线程。所以是的,即使主线程终止, session 线程也应该继续运行。

您的代码在我看来是正确的。您确定存在关于该主题的消息吗?此外,只有在消费者上线后发布到主题的消息才会被接收。

关于java - 为什么这个 messageListener 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22890386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com