gpt4 book ai didi

java - 如何让MessageListener在收到某条消息后停止监听JMS中的消息?

转载 作者:行者123 更新时间:2023-11-30 07:13:59 28 4
gpt4 key购买 nike

我有一个正在接收一些 TextMessages 的消息监听器。当它收到 ObjectMessage 时,我希望它停止收听队列。我的问题是,当我在 onMessage(Message msg) 方法中调用 consumer.close() 时,ObjectMessage 似乎没有从队列中删除。如果我使用一些标记告诉消费者在 onMessage() 方法之后关闭,那么监听器可能会在它实际关闭之前使用另一条消息。有什么建议么?这是一些代码。 Session、Connection 和 InitialContext 尚未关闭。

public class MyListener implements MessageListener{
MessageConsumer consumer;

public MyListener(MessageConsumer mc){
consumer = mc;
}

@Override
public void onMessage(Message msg) {
try{
if(msg instanceof ObjectMessage){
consumer.close();
}
if (msg instanceof TextMessage){
TextMessage tmsg = (TextMessage) msg;
String xml = tmsg.getText();
// do some stuff
}

}catch(Exception e){
e.printStackTrace();
}
}

最佳答案

不要使用异步MessageListener

而是在循环中的主线程中使用普通的同步 receive 方法。如果您收到特殊消息,您可以确认并跳出循环以关闭 session 并终止程序。

关于java - 如何让MessageListener在收到某条消息后停止监听JMS中的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18787939/

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