我有一个正在接收一些 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/