【发布时间】:2022-01-01 19:22:47
【问题描述】:
希望你们都平安!我需要一些关于 Cloud Pub/Sub 触发的云功能的帮助...
我有一个由我的主题之一触发的云功能。我想通过这条消息向另一个主题发送一条新消息,但我遇到了一些错误。
我的功能:
const { PubSub } = require("@google-cloud/pubsub");
exports.helloPubSub = async (message, context) => {
try {
let messageData = Buffer.from(message.data, "base64").toString();
let messageObjectData = JSON.parse(messageData);
//send pub/sub message to another topic
sendPubSubMessage(messageObjectData);
} catch (error) {
console.log(error.message);
}
};
function sendPubSubMessage(
messageObjectData,
topicName = "projects/myproject/topics/mytopic",
data = JSON.stringify(messageObjectData)
) {
const pubSubClient = new PubSub();
async function publishMessage() {
const dataBuffer = Buffer.from(data);
try {
const messageId = await pubSubClient.topic(topicName).publish(dataBuffer);
console.log(`Message ${messageId} published.`);
} catch (error) {
console.error(`Received error while publishing: ${error.message}`);
process.exitCode = 1;
}
}
publishMessage();
}
包.json:
{
"name": "sample-pubsub",
"version": "0.0.1",
"dependencies": {
"@google-cloud/pubsub": "^0.18.0"
}
}
当这个函数运行时,我得到这个错误:
ERROR: PubSub is not a constructor
我尝试将依赖版本更改为最后一个2.18.3,但是它没有部署...
我也尝试加载两个版本:
{
"name": "sample-pubsub",
"version": "0.0.1",
"dependencies": {
"@google-cloud/pubsub": "^0.18.0",
"lastPubSub" : "npm:google-cloud/pubsub@^2.18.3",
}
}
得到了同样的错误...
有人知道如何解决吗?
提前致谢!
【问题讨论】:
-
你显然有依赖混淆。我不知道如何在 NodeJS 中解决这个问题,特别是因为当您使用最新版本时,您无法部署,因为您覆盖了内置消息接收器所需的库。如果没有 NodeJS 专家可以回答您,解决方案是使用 HTTP 函数和 PubSub 推送订阅来调用您的函数。
-
嘿@guillaumeblaquiere,谢谢你的评论!你认为我使用任何其他语言会遇到同样的问题吗?谢谢!
-
有可能,是的。我不知道是哪一个,但是如果用于接收消息的依赖项与发布消息的依赖项的版本不同,那么您的依赖项就会发生冲突和混乱。
-
Juuuuust 试试看……试试
new PubSub({<project_id>});。我不是 100% 确定节点中的 PubSub 对象有一个默认构造函数(我个人是一个 Python 人)。
标签: google-cloud-functions google-cloud-pubsub