0

私の Web アプリでは、実行可能なインスタンスを ScheduledExecutorService に送信します。実行可能なインスタンスでは、receiveNoWaitメソッドを使用してIBM MQからメッセージを受信し、セッションはCLIENT_ACKNOWLEDGEモードになっています。ScheduledExecutorService の shutdownNow メソッドを呼び出すと、acknowledge メソッドを呼び出さずに receive メソッドがメッセージを失うことがあります。何か提案はありますか? メッセージを受信するコードは次のとおりです。

{
ScheduledExecutorService shutdownNow の場合、例外なく最初のログ情報しか表示されません。

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

メッセージ msg = consumer.receiveNoWait();

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

メッセージを返します。

キャッチ(スロー可能なe){

logger.error("处理数的時候出现异常", e);

null を返します。

}

4

1 に答える 1

0

shutdownNow()メソッドは、実行中のタスクを中断しようとします。receiveNoWait メソッドが終了する時間があった場合は、メッセージを受け取りますが、そうでない場合は受け取りません。実行中のタスクを終了する必要がある場合は、ExecutorService インターフェイスのawaitTerminationメソッド、または submit メソッドによって返される Future オブジェクトのメソッド (isDone()、get() ...) を使用できます。

于 2013-07-29T20:02:08.083 に答える