1

SqsMessageDrivenChannelAdapter呼び出し時に停止しようとしましたstop()が、次のエラーが表示されました。

java.util.concurrent.TimeoutException: null
at java.util.concurrent.FutureTask.get(FutureTask.java:205)
at org.springframework.cloud.aws.messaging.listener.SimpleMessageListenerContainer.stop(SimpleMessageListenerContainer.java:197)
at org.springframework.cloud.aws.messaging.listener.SimpleMessageListenerContainer.doStop(SimpleMessageListenerContainer.java:133)
at org.springframework.cloud.aws.messaging.listener.AbstractMessageListenerContainer.stop(AbstractMessageListenerContainer.java:329)
at org.springframework.cloud.aws.messaging.listener.SimpleMessageListenerContainer.stop(SimpleMessageListenerContainer.java:1)
at org.springframework.integration.aws.inbound.SqsMessageDrivenChannelAdapter.doStop(SqsMessageDrivenChannelAdapter.java:140)
at org.springframework.integration.endpoint.AbstractEndpoint.stop(AbstractEndpoint.java:111)

タイムアウトだと思った最初の兆候は十分な長さではありませんでした。問題を調べたところ、停止しているスレッドと実行中のスレッドが互いに待機しており、TimeoutException常に発生することがわかりました。次のコードでこれを修正しました。

new Thread() {
     public void run()
     {
        sqsMessageRawDataChannelAdapter.stop();
        LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(5));
     }
  }.start();

TimeoutExceptionスレッドが停止できるようになったため、取得できなくなりました。私は何か間違ったことをしましたか、それともこれは問題ですか?

4

1 に答える 1