【问题标题】:ERROR i.g.i.ManagedChannelOrphanWrapper Make sure to call shutdown()/shutdownNow() and wait until awaitTermination() returns true错误 i.g.i.ManagedChannelOrphanWrapper 确保调用 shutdown()/shutdownNow() 并等待 awaitTermination() 返回 true
【发布时间】:2021-10-18 14:45:37
【问题描述】:

我创建订阅者以从 pubSub 主题同步拉取消息。我使用了文档example中的确切设置。

但是,当我尝试关闭订阅者并创建新订阅者时,我遇到了以下问题。

[pool-1-thread-8] ERROR i.g.i.ManagedChannelOrphanWrapper - *~*~*~ Channel ManagedChannelImpl{logId=47567, target=pubsub.googleapis.com:443} was not shutdown properly!!! ~*~*~*
Make sure to call shutdown()/shutdownNow() and wait until awaitTermination() returns true.
java.lang.RuntimeException: ManagedChannel allocation site
at io.grpc.internal.ManagedChannelOrphanWrapper$ManagedChannelReference.<init> 
(ManagedChannelOrphanWrapper.java:93)
at io.grpc.internal.ManagedChannelOrphanWrapper.<init>(ManagedChannelOrphanWrapper.java:53)
at io.grpc.internal.ManagedChannelOrphanWrapper.<init>(ManagedChannelOrphanWrapper.java:44)
at io.grpc.internal.ManagedChannelImplBuilder.build(ManagedChannelImplBuilder.java:612)
at io.grpc.internal.AbstractManagedChannelImplBuilder.build(AbstractManagedChannelImplBuilder.
java:261) at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createSingleChannel
(InstantiatingGrpcChannelProvider.java:340)
at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.access$1600
(InstantiatingGrpcChannelProvider.java:73)
at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider$1.createSingleChannel
(InstantiatingGrpcChannelProvider.java:214)
at com.google.api.gax.grpc.ChannelPool.create(ChannelPool.java:72)
at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.
 createChannel(InstantiatingGrpcChannelProvider.java:221)
at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider
.getTransportChannel(InstantiatingGrpcChannelProvider.java:204)
at com.google.api.gax.rpc.ClientContext.create(ClientContext.java:169)
at com.google.cloud.pubsub.v1.stub.GrpcSubscriberStub.create(GrpcSubscriberStub.java:272)
at eu.hermes.esb.cloud.service.SubService.getSubscriber(SubService.java:48)
at eu.hermes.esb.cloud.runnables.SubTask.run(SubTask.java:31)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)

我用于创建和关闭订阅者的代码:

   while (compositeConfigurationElement.getSubscriber().isEnabled()) {
        SubscriberStub subscriber;
        try {
            subscriber = subService.getSubscriber(compositeConfigurationElement);
            subService.pullAndSend(compositeConfigurationElement, subscriptionName, subscriber);
            subscriber.shutdown();
            subscriber.awaitTermination(20, TimeUnit.SECONDS);

        } catch (DeadlineExceededException e) {
            // this is a know issue at the moment ->
            // 1- https://github.com/googleapis/google-cloud-java/issues/4220
            // 2- https://stackoverflow.com/questions/60012138/google-cloud-function-pulling-from-pub-sub-subscription-throws-exception-deadl
            // 3- https://github.com/googleapis/google-cloud-java/issues/3648
            log.warn("Deadline exceeded for subscription");
        } catch (Exception e) {
            log.error("Exception with the subscription service", e);
            try {
                TimeUnit.SECONDS.sleep(10);
            } catch (Exception e2) {
                log.error("Exception during wait", e2);
            }
        }
    }

那么,如何摆脱这个错误信息?和 尽管我捕获了所有异常,但究竟是如何抛出这个异常的。

我正在使用 google-cloud-pubsub:1.110.3

【问题讨论】:

  • 其实我认为这是拉消息的推荐方法。它创建一个订阅者并拉取然后将其关闭。我在某处的文档中读到它。我认为这不会发生,因为我正在创建和关闭订阅者,因为我正在关闭订阅者。所以,这不应该给我这个错误消息,说请关闭订阅者。

标签: java google-cloud-platform grpc google-cloud-pubsub


【解决方案1】:

所以,我错过了当发生空订阅时,拉取请求会抛出我已经捕获的DeadlineExceededException ,但我错过了在这种情况下订阅者没有关闭。

所以解决方案是在 catch 或 finally 块中关闭订阅者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多