为什么在ScheduledExecutorService shutdownNow时我的消息丢失了

时间:2013-05-29 02:26:17

标签: java jms ibm-mq scheduledexecutorservice

在我的网络应用程序中,我向ScheduledExecutorService提交了一个可运行的实例。在可运行的实例中,我通过使用 receiveNoWait 方式从 IBM MQ 接收消息,并且会话处于 CLIENT_ACKNOWLEDGE 模式。当我调用ScheduledExecutorService的shutdownNow方法时,接收方法有时会丢失消息而不调用确认方法。对我有什么建议吗?
这是接收消息的代码。

  

尝试{
  当ScheduledExecutorService shutdownNow时,我只能看到第一个loginfo而没有任何异常。

     
    

logger.info( “获取消息”);

         

消息msg = consumer.receiveNoWait();

         

logger.info( “获取消息成功”);

         

return msg;

  
     

} catch(Throwable e){

     
    

logger.error(“处理数据的时候出现异常”,e);

         

返回null;

  
     

}

1 个答案:

答案 0 :(得分:0)

shutdownNow()方法尝试中断正在运行的任务。如果receiveNoWait方法有时间完成,则会收到消息,否则不会。如果需要运行任务,可以使用ExecutorService接口的awaitTermination方法或者提交方法返回的Future对象的方法(isDone(),get()...)。