使用 Google Cloud Pub/Sub 消息订阅者实现时无法创建 Spring-Boot bean

Posted

技术标签:

【中文标题】使用 Google Cloud Pub/Sub 消息订阅者实现时无法创建 Spring-Boot bean【英文标题】:Spring-Boot bean failed to create when using Google Cloud Pub/Sub message subscriber implementation 【发布时间】:2019-11-10 13:25:43 【问题描述】:

我正在尝试运行一个具有 Spring-Boot、具有订阅者实现的 Google Cloud Pub/Sub 的项目,它给出以下错误

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name \u0027pubsubProducer\u0027 defined in URL [jar:file:PubsubProducer.class]: Initialization of bean failed; nested exception is java.lang.IllegalStateException: Could not find TLS ALPN provider; no working netty-tcnative, Conscrypt, or Jetty NPN/ALPN available
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:584)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1244)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
    ... 27 common frames omitted
    Caused by: java.lang.IllegalStateException: Could not find TLS ALPN provider; no working netty-tcnative, Conscrypt, or Jetty NPN/ALPN available
    at io.grpc.netty.shaded.io.grpc.netty.GrpcSslContexts.defaultSslProvider(GrpcSslContexts.java:258)
    at io.grpc.netty.shaded.io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:171)
    at io.grpc.netty.shaded.io.grpc.netty.GrpcSslContexts.forClient(GrpcSslContexts.java:120)
    at io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder.buildTransportFactory(NettyChannelBuilder.java:436)
    at io.grpc.internal.AbstractManagedChannelImplBuilder.build(AbstractManagedChannelImplBuilder.java:509)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createSingleChannel(InstantiatingGrpcChannelProvider.java:223)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createChannel(InstantiatingGrpcChannelProvider.java:169)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.getTransportChannel(InstantiatingGrpcChannelProvider.java:156)
    at com.google.api.gax.rpc.ClientContext.create(ClientContext.java:157)
    at com.google.cloud.pubsub.v1.stub.GrpcPublisherStub.create(GrpcPublisherStub.java:164)
    at com.google.cloud.pubsub.v1.Publisher.\u003cinit\u003e(Publisher.java:152)
    at com.google.cloud.pubsub.v1.Publisher.\u003cinit\u003e(Publisher.java:82)
    at com.google.cloud.pubsub.v1.Publisher$Builder.build(Publisher.java:597)

我能够运行这个项目,但发生了一些变化,现在我无法在 Linux Fedora 30 机器上运行它,但在 Windows 上运行良好,我查看了可能触发此问题的原因,但他们说我有不同版本的 @ 987654322@和grpc-netty-shaded,但它们是相同的1.21.0

另外,我只使用google-cloud-pubsub-client 并且无法控制其版本。我是否也需要在本地安装包?我在 RPM 中为 grpc 和 netty 找到了一些。

感谢您的帮助,如果您需要其他任何帮助,请发表评论。

谢谢

【问题讨论】:

【参考方案1】:

由于没有人回答我的问题,我将其放在以供将来参考。

因为我在 Fedora 30 上,它缺少一个库 libxcrypt-compat,安装后,构建运行成功。

【讨论】:

我不得不在我的 dockerfile 中切换到不同的基础镜像 FROM adoptopenjdk/openjdk8:alpine-slim 而不是 openjdk 之一,并为我的节点池激活 Pubsub 权限。 我无法访问 Dockerfile

以上是关于使用 Google Cloud Pub/Sub 消息订阅者实现时无法创建 Spring-Boot bean的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Google Cloud Pub/Sub 进行 Junit 测试

Google Cloud Pub/Sub - Cloud Function & Bigquery - 数据插入未发生

Google Cloud Pub/Sub,使用 HTTP PUSH 请求发布

Firebase Pub Sub Emulator 未收到消息

Google Cloud Pub/Sub 确认

访问 Google Cloud Storage 触发事件“Pub/Sub”?