0

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

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

logger.info("获取消息");

消息 msg = consumer.receiveNoWait();

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

返回味精;

} 捕捉(可投掷的 e){

logger.error("处理数据的时间出现异常", e);

返回空值;

}

4

1 回答 1

0

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

于 2013-07-29T20:02:08.083 回答