【发布时间】:2013-09-18 05:41:37
【问题描述】:
我有一个消息监听器正在接收一些文本消息。当它收到一个 ObjectMessage 时,我希望它停止监听队列。我的问题是,当我在 onMessage(Message msg) 方法中调用 consumer.close() 时,ObjectMessage 似乎没有从队列中删除。如果我在 onMessage() 方法之后使用一些标记来告诉 consuemr 关闭,则侦听器可能会在它实际关闭之前使用另一条消息。有什么建议?这是一些代码。 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();
}
}
【问题讨论】:
-
真的是
Queue还是Topic?我相信消息一旦被检索到,就会从Queue中消失。 -
这是一个队列。我也有同样的想法,但是下次我尝试接收 TextMessages 时,它会在第一次调用 onMessage 时关闭...大概是因为对象消息仍然存在
标签: java jms message-listener