gloud-Java. PERMISSION_DENIED: Google Cloud Pub / Sub API (экспериментальный)

Я использую экспериментальную библиотеку gloud-java. После обновления сегодня произошла ошибка. Пример запуска из локальной библиотеки (эта ошибка автоматически появляется в гибком движке облака Google, хотя развертывание не производится в течение недели)

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);
    }
}
}

бросить исключение

Aug 10, 2016 2:19:08 AM io.grpc.internal.ManagedChannelImpl <init>
INFO: [[email protected]] Created with target pubsub-experimental.googleapis.com:443
Aug 10, 2016 2:19:08 AM io.grpc.internal.ManagedChannelImpl <init>
INFO: [[email protected]] Created with target pubsub-experimental.googleapis.com:443
Aug 10, 2016 2:19:10 AM io.grpc.internal.ManagedChannelImpl maybeTerminateChannel
INFO: [[email protected]] 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: [[email protected]] Terminated

Как обойти эту проблему? Проблема возникла из ничего. С утра это сработало :)

постскриптум

$ gcloud info

показывает правильную информацию

$ gcloud auth login

не помогло

Ответы на вопрос(1)

(Предостережение: я работаю над созданием команды эквивалентной библиотеки для .NET. Это означает, что я знаю определенное количество задействованной инфраструктуры, но я не знаю деталей, специфичных для Java.)

Если вы просто пытаетесь использовать API PubSub v1, я считаю, что проблема в том, что он подключается кpubsub-experimental.googleapis.com вместоpubsub.googleapis.com, Я не уверен, почему он рассматривает это как конечную точку по умолчанию -хост по умолчанию в коде Выглядит хорошо - но я считаю, что вы сможете исправить это, установив хост вручную:

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

Учитывая, что исходный код в github кажется нормальным, вы также можете проверить, используете ли вы последнюю опубликованную версию библиотеки ... вполне возможно, что хост по умолчанию был исправлен в этом. Согласно комментариям, gcloud-java 0.2.7 использует правильный хост по умолчанию.

 mziccard11 авг. 2016 г., 16:24
@JonSkeet прав, pubsub-экспериментальный больше не доступен. gcloud-java 0.2.7 вышел и исправляет эту проблему с помощью pubsub.googleapis.com по умолчанию. Джон, ты хочешь добавить это в свой ответ?
 vad babushkin10 авг. 2016 г., 00:02
Я озадачен тем, что код не работает в облаке. Он не изменился за неделю. Я проверил ваш код - тот же результат. Я постараюсь отладить. может быть Google изменить экспериментальную версию Pub / Sub Engine
 Jon Skeet12 авг. 2016 г., 00:07
@mziccard: Спасибо, добавили, что в.
 Jon Skeet10 авг. 2016 г., 00:13
@vadbabushkin: Хотя ваш код не изменился, я не удивлюсь, еслиpubsub-experimental например, конечная точка была отключена для общественных проектов. Обратите внимание, что я получаю ту же ошибку, что и выpubsub-experimental, но не дляpubsub, Вы также должны дважды проверить, что проект действительноделает включить pubsub.

Ваш ответ на вопрос