使用 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 请求发布