gcloud pubsub publi sh ошибка сообщения - PullRequest
0 голосов
/ 17 июня 2020
I am trying to publish the message on topic but I am not able to publish the message. I am using laravelframework. My subscription is push type. 

Я использовал $ composer требуется google / cloud-pubsub из https://github.com/googleapis/google-cloud-php-pubsub ссылка Я перешел по этой ссылке: (https://cloud.google.com/pubsub/docs/publisher#php)

**use Google\Cloud\PubSub\PubSubClient;**
function publish_message($projectId, $topicName, $message)
{
    $pubsub = new PubSubClient([\[][1]
        'projectId' => $projectId,
    ]);
    $topic = $pubsub->topic($topicName);
    $topic->publish(['data' => $message]);
    print('Message published' . PHP_EOL);
}

I am getting this error (open this link : https://i.stack.imgur.com/XXHZ5.png.


  [1]: https://i.stack.imgur.com/XXHZ5.png

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Ваш вопрос будет лучше объяснен более подробно.

Как бы то ни было, код, который вы показываете, совпадает с кодом, опубликованным Google.

Предполагается, что (!?) Код Google работает (возможно, но не обязательно), ваш код должен работать.

Поскольку мы знаем, что ваш код не работает, вероятно, это что-то еще.

Я подозреваю, что вы пропустили один или несколько следующие, возможно, последние шаги:

  • создал проект Google Cloud Platform ($projectId)?
  • включил Pub / Sub API?
  • создал Pub / Sub topi c [и> = 1 подписчик] ($topicName)?
  • созданный (служебный аккаунт) учетные данные, разрешенные для публикации sh на этом topi c?
  • установить GOOGLE_APPLICATION_CREDENTIALS, чтобы указать на ключ учетной записи?

Как вы запускаете код?

Если возможно, пожалуйста, также print ClientException, который вы показываете на изображении.

Обновление

Я протестировал код Google, и он у меня работает:

BILLING_ID=[[YOUR-BILLING]]
PROJECT_ID=[[YOUR-PROJECT]]
TOPIC_NAME=[[YOUR-TOPIC-NAME]]

gcloud projects create ${PROJECT}
gcloud beta billing projects link ${PROJECT} \
--billing-account=${BILLING}


# Enabled Pub/Sub and create topic=subscription=${TOPIC_NAME}

gcloud services enable pubsub.googleapis.com \
--project=${PROJECT}

gcloud pubsub topics create ${TOPIC_NAME} \
--project=${PROJECT}

gcloud pubsub subscriptions create ${TOPIC_NAME} \
--topic=${TOPIC_NAME} \
--project=${PROJECT}


# Create service account ${ROBOT} and key `./${ROBOT}.json`
# Grant the account `publisher` permissions

ROBOT=[[YOUR-ACCOUNT-NAME]]

gcloud iam service-accounts create ${ROBOT} \
--project=${PROJECT}

gcloud iam service-accounts keys create ./${ROBOT}.json \
--iam-account=${ROBOT}@${PROJECT}.iam.gserviceaccount.com \
--project=${PROJECT}

gcloud projects add-iam-policy-binding ${PROJECT} \
--member=serviceAccount:${ROBOT}@${PROJECT}.iam.gserviceaccount.com \
--role=roles/pubsub.publisher

Затем - и извинения, я не * 1 067 * разработчик - вот что я сделал:

composer.json:

{ "require": { "google/cloud-pubsub": "1.24.1" } }

pubsub.php:

<?php

require_once 'vendor/autoload.php';

use Google\Cloud\PubSub\PubSubClient;

// Expects Env PROJECT_ID, TOPIC_NAME **and** GOOGLE_APPLICATION_CREDENTIALS
$projectId = getenv("PROJECT_ID");
$topicName = getenv("TOPIC_NAME");

$pubsub = new PubSubClient([
        "projectId" => $projectId
]);

$topic = $pubsub->topic($topicName);
$topic->publish(["data"=>"Hello Freddie!"]);
print("Message published" . PHP_EOL);

?>

Тогда:

export GOOGLE_APPLICATION_CREDENTIALS=./${ROBOT}.json
export PROJECT_ID
export TOPIC_NAME
php pubsub.php

ПРИМЕЧАНИЕ код неявно предполагает GOOGLE_APPLICATION_CREDENTIALS для аутентификации с помощью службы, см. Учетные данные приложения по умолчанию

дает:

Message published

И:

gcloud pubsub subscriptions pull ${TOPIC_NAME} \
--project=${PROJECT} \
--format="value(message.data)"
Hello Freddie!
0 голосов
/ 17 июня 2020

Я предполагаю, что проблема, с которой вы столкнулись, связана с тем, что вы пропустили этап аутентификации. Вы создали SA и загрузили файл json для аутентификации? Если это так, дважды проверьте, есть ли у вас эта строка в вашей файловой системе:

export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-credentials.json
...