Облачная функция (триггер по HTTP), которая публикует сообщение в PubSub - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь создать HTTP API в облачной функции, которая в конечном итоге опубликовала сообщение t PubSub.Понял, что есть REST API PubSub - но он заставил меня настроить аутентификацию (на стороне клиента) - что я хотел бы пропустить и переместить его на сторону сервера.

Ниже код развернут как GoogleОблачная функция с этой командой gcloud functions deploy helloGET --runtime nodejs8 --trigger-http

Но при тестировании в браузере она выводится с ошибкой Error: could not handle the request Любое предложение приветствуется, спасибо!

"use strict";

// [START functions_pubsub_setup]
const { PubSub } = require("@google-cloud/pubsub");

// Instantiates a client
const pubsub = new PubSub();
// [END functions_pubsub_setup]

const Buffer = require("safe-buffer").Buffer;

exports.helloGET = (req, res) => {
  const topic = pubsub.topic("projects/myproject/topics/openit");

  const message = {
    data: {
      message: "req.body.message"
    }
  };

  // Publishes a message
  res.send(
    topic
      .publish(message)
      .then(() => res.status(200).send("Message published."))
      .catch(err => {
        err = `Catch block  ... ${err}`;
        console.error(err);
        res.status(500).send(err);
        return Promise.reject(err);
      })
  );
};

1 Ответ

0 голосов
/ 21 февраля 2019

Ниже код будет работать.Но для получения события подписчику потребуется около 30 секунд или более - это слишком медленно для моего использованного случая: S

"use strict";
const { PubSub } = require("@google-cloud/pubsub");
const pubsub = new PubSub();
const Buffer = require("safe-buffer").Buffer;

exports.helloGET = async (req, res) => {
  var toPublish = `hello ${Date.now()}`;
  publishMessage("_REPLACE_WITH_TOPIC_NAME_", toPublish);
  res.send(`Published ${toPublish}`);
};

async function publishMessage(topicName, data) {
  console.log("=> publishMessage, data = ", data);
  const dataBuffer = Buffer.from(data);
  const topic = pubsub.topic(topicName);
  const publisher = topic.publisher();
  publisher.publish(dataBuffer, { a: "XYZ" }, function() {
    console.log("Published eventually ...");
  });
}
...