在我的网络应用程序中,我向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;
}
答案 0 :(得分:0)
shutdownNow()方法尝试中断正在运行的任务。如果receiveNoWait方法有时间完成,则会收到消息,否则不会。如果需要运行任务,可以使用ExecutorService接口的awaitTermination方法或者提交方法返回的Future对象的方法(isDone(),get()...)。