我正在使用与Google Cloud PubSub交互的应用程序。它在正常情况下工作正常但我想启用代理支持,所以我通过Publisher.Builder
和Subscriber
类及其API来查看是否有任何API可用于启用代理支持。我设法只找到setChannelProvider
,但我不确定这是否有效。
以下代码片段是我正在考虑使用的,但似乎不起作用。
ManagedChannel channel = ManagedChannelBuilder.forAddress(proxyHost, proxyPort).build();
TransportChannelProvider channelProvider = FixedTransportChannelProvider.create(GrpcTransportChannel.create(channel));
publisherBuilder.setChannelProvider(channelProvider);
我无法成功向云服务发送publish
或pull
条消息。我收到以下错误:
java.util.concurrent.ExecutionException: io.grpc.StatusRuntimeException: DEADLINE_EXCEEDED: deadline exceeded after 9978300322ns
所以我想知道PubSub服务是通过API支持代理,还是只支持代理设置,即只在环境路径中提供主机和端口。
答案 0 :(得分:3)
您可以直接使用JVM args https.proxyHost
,https.proxyPort
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 post和gist的总和,专门用于需要基本身份验证标头的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());
}