如何在代理服务器上使用Google Cloud PubSub?

时间:2018-06-17 07:00:24

标签: proxy google-cloud-platform google-cloud-pubsub

我正在使用与Google Cloud PubSub交互的应用程序。它在正常情况下工作正常但我想启用代理支持,所以我通过Publisher.BuilderSubscriber类及其API来查看是否有任何API可用于启用代理支持。我设法只找到setChannelProvider,但我不确定这是否有效。

以下代码片段是我正在考虑使用的,但似乎不起作用。

ManagedChannel channel = ManagedChannelBuilder.forAddress(proxyHost, proxyPort).build();
TransportChannelProvider channelProvider = FixedTransportChannelProvider.create(GrpcTransportChannel.create(channel));
publisherBuilder.setChannelProvider(channelProvider);

我无法成功向云服务发送publishpull条消息。我收到以下错误:

java.util.concurrent.ExecutionException: io.grpc.StatusRuntimeException: DEADLINE_EXCEEDED: deadline exceeded after 9978300322ns

所以我想知道PubSub服务是通过API支持代理,还是只支持代理设置,即只在环境路径中提供主机和端口。

3 个答案:

答案 0 :(得分:3)

您可以直接使用JVM args https.proxyHosthttps.proxyPort

指定proxyHost / port。
mvn clean install -Dhttps.proxyHost=localhost -Dhttps.proxyPort=3128  exec:java

然后直接创建您选择的客户

TopicAdminSettings topicAdminSettings =   TopicAdminSettings.newBuilder().build();
TopicAdminClient topicAdminClient = TopicAdminClient.create(topicAdminSettings);

仅供参考-在此处设置ManagedChannelBuilder.forAddress()会覆盖pubsub的最终目标(应为pubsub.googleapis.com 443(而不是代理)

这里是medium postgist的总和,专门用于需要基本身份验证标头的pubsub和pubsub + proxy


最后,只需注意,即使您使用的是httpProxy,它的https.proxyHost也会参考grpc#9561

答案 1 :(得分:0)

Google Pub / Sub不支持通过HTTP进行代理身份验证,但是可以使用GRPC_PROXY_EXP environment variable进行配置。

我找到了same error that you got here(这就是为什么我假设您使用HTTP的原因),并且它通过使用我所说的内容得到了解决。

答案 2 :(得分:0)

您需要设置JVM args:https.proxyHost,https.proxyPort 对于代理身份验证,在创建任何客户端之前都需要进行其他配置:

 Authenticator.setDefault(new Authenticator() {
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return
                                    new PasswordAuthentication(proxyUsername,proxyPassword).toCharArray());
                        }