首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring-integration-aws:调用stop()时等待彼此的SqsMessageDrivenChannelAdapter线程

spring-integration-aws:调用stop()时等待彼此的SqsMessageDrivenChannelAdapter线程
EN

Stack Overflow用户
提问于 2016-06-17 14:07:00
回答 1查看 255关注 0票数 1

当调用SqsMessageDrivenChannelAdapter时,我试图停止stop() --我收到了以下错误:

代码语言:javascript
复制
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总是会发生的。我通过下面的代码来修正这个问题:

代码语言:javascript
复制
new Thread() {
     public void run()
     {
        sqsMessageRawDataChannelAdapter.stop();
        LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(5));
     }
  }.start();

我现在不再得到TimeoutException,因为线程能够停止。我做错什么了吗,还是这是个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-17 16:32:21

嗯-嗯。看起来像是代码中的死锁。

您试图从侦听器持有的线程中停止适配器(因此也是侦听器)。

用你的话说,stopping thread == running thread

为了避免这样的问题,您肯定应该将stop操作转移到不同的线程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37883709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档