Spring AMQP Listener Timeout

时间:2017-06-13 09:23:31

标签: rabbitmq spring-amqp spring-rabbit spring-rabbitmq

我需要处理SpringAMQP监听器超时功能,即我们从生产者发送消息,Spring AMQP的消费者监听器线程接收消息但说需要花费大量时间来执行自己并被绞死,这最终会导致监听器线程被渲染为无法使用。

那么有没有办法让Spring AMQP提供任何消费者超时设置,以便在给定的超时时间后再次释放侦听器线程

2 个答案:

答案 0 :(得分:2)

确实你可以使用spring-amqp提及超时,这里是如何。

 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err: com.google.android.exoplayer2.drm.UnsupportedDrmException: android.media.UnsupportedSchemeException: Failed to instantiate drm object.
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at com.google.android.exoplayer2.drm.FrameworkMediaDrm.newInstance(FrameworkMediaDrm.java:50)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at com.cinesoft.cinehome.player.PlayerActivity.buildDrmSessionManager(PlayerActivity.java:483)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at com.cinesoft.cinehome.player.PlayerActivity.initPlayer(PlayerActivity.java:398)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at com.cinesoft.cinehome.player.PlayerActivity.onPlayRequestResult(PlayerActivity.java:1308)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at com.cinesoft.cinehome.api.services.ConnectToServer$3.onResponse(ConnectToServer.java:503)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at com.cinesoft.cinehome.api.services.ConnectToServer$3.onResponse(ConnectToServer.java:483)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:65)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at android.os.Looper.loop(Looper.java:148)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7325)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err: Caused by: android.media.UnsupportedSchemeException: Failed to instantiate drm object.
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at android.media.MediaDrm.native_setup(Native Method)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at android.media.MediaDrm.<init>(MediaDrm.java:215)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at com.google.android.exoplayer2.drm.FrameworkMediaDrm.<init>(FrameworkMediaDrm.java:57)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     at com.google.android.exoplayer2.drm.FrameworkMediaDrm.newInstance(FrameworkMediaDrm.java:48)
 06-13 17:31:53.641 18652-18652/com.cinesoft.cinehome.android W/System.err:     ... 14 more

注意:如果您的消费者数量有限并且使用手动确认并且由于某种原因没有发回确认信号,则可能会发生超时;这意味着你持有线程而不释放它也会影响你的表现。

更多信息

  1. doc
  2. api

答案 1 :(得分:0)

如果线程卡在您的代码中,则容器无法释放它。如果它是可中断的代码,你可以中断线程。

如果它被卡在不间断的代码中,那你就不走运了。