gloud-java. PERMISSION_DENIED: Google Cloud Pub/Sub API (Experimental)

只谈情不闲聊 提交于 2019-12-06 12:26:55

问题


I use gloud-java experimental library. After update today, error occurred. Run example from library local (This error is automatically appeared in the google cloud flexible engine, although deploy not produced for a week)

public class PullTest {
private static final transient Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());

public static void main(String... args) throws Exception {
    try (PubSub pubsub = PubSubOptions.defaultInstance().service()) {
        String subscriptionName = "subscription-segment";
        Subscription subscription = pubsub.getSubscription(subscriptionName);
    }
}
}

throw exception

Aug 10, 2016 2:19:08 AM io.grpc.internal.ManagedChannelImpl <init>
INFO: [ManagedChannelImpl@131ef10] Created with target pubsub-experimental.googleapis.com:443
Aug 10, 2016 2:19:08 AM io.grpc.internal.ManagedChannelImpl <init>
INFO: [ManagedChannelImpl@394df057] Created with target pubsub-experimental.googleapis.com:443
Aug 10, 2016 2:19:10 AM io.grpc.internal.ManagedChannelImpl maybeTerminateChannel
INFO: [ManagedChannelImpl@131ef10] Terminated
Exception in thread "main" com.google.cloud.pubsub.PubSubException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Google Cloud Pub/Sub API (Experimental) has not been used in project google.com:cloudsdktool before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/pubsub-experimental.googleapis.com/overview?project=google.com:cloudsdktool then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
at com.google.cloud.pubsub.spi.DefaultPubSubRpc$1.apply(DefaultPubSubRpc.java:183)
at com.google.cloud.pubsub.spi.DefaultPubSubRpc$1.apply(DefaultPubSubRpc.java:177)
at com.google.common.util.concurrent.Futures$CatchingFuture.doFallback(Futures.java:842)
at com.google.common.util.concurrent.Futures$CatchingFuture.doFallback(Futures.java:834)
at com.google.common.util.concurrent.Futures$AbstractCatchingFuture.run(Futures.java:789)
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:456)
at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:817)
at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:753)
at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:634)
at com.google.common.util.concurrent.SettableFuture.setException(SettableFuture.java:53)
at com.google.api.gax.grpc.RetryingCallable$Retryer$1.onFailure(RetryingCallable.java:139)
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1764)
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:456)
at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:817)
at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:753)
at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:634)
at com.google.common.util.concurrent.SettableFuture.setException(SettableFuture.java:53)
at com.google.api.gax.grpc.ExceptionTransformingCallable$1.onFailure(ExceptionTransformingCallable.java:90)
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1764)
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:456)
at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:817)
at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:753)
at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:634)
at io.grpc.stub.ClientCalls$GrpcFuture.setException(ClientCalls.java:331)
at io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:307)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$3.runInContext(ClientCallImpl.java:462)
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:54)
at io.grpc.internal.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:154)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.google.api.gax.grpc.ApiException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Google Cloud Pub/Sub API (Experimental) has not been used in project google.com:cloudsdktool before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/pubsub-experimental.googleapis.com/overview?project=google.com:cloudsdktool then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
... 18 more
Caused by: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Google Cloud Pub/Sub API (Experimental) has not been used in project google.com:cloudsdktool before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/pubsub-experimental.googleapis.com/overview?project=google.com:cloudsdktool then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
at io.grpc.Status.asRuntimeException(Status.java:503)
... 11 more
Aug 10, 2016 2:19:10 AM io.grpc.internal.ManagedChannelImpl maybeTerminateChannel
INFO: [ManagedChannelImpl@394df057] Terminated

How to get around this problem? The problem arose out of nothing. In the morning it worked :)

p.s.

$ gcloud info

shows the correct information

$ gcloud auth login

did not help


回答1:


(Caveat: I work on the team building the equivalent library for .NET. That means I know a certain amount of the infrastructure involved, but I don't know any Java-specific details.)

If you're just trying to use the PubSub v1 API, I believe the problem is that it's connecting to pubsub-experimental.googleapis.com instead of pubsub.googleapis.com. I'm not sure why it's treating that as the default endpoint - the default host in the code look okay - but I believe you should be able to fix it by setting the host manually:

PubSubOptions options = PubSubOptions.builder().host("pubsub.googleapis.com").build();
try (PubSub pubsub = options.service()) {
    String subscriptionName = "subscription-segment";
    Subscription subscription = pubsub.getSubscription(subscriptionName);
}

Given that the source code in github seems okay, you might also want to check that you're using the latest published version of the library... it may well be that the default host has been fixed in that. As per comments, gcloud-java 0.2.7 uses the correct host by default.



来源:https://stackoverflow.com/questions/38860888/gloud-java-permission-denied-google-cloud-pub-sub-api-experimental

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!