如何不使用Cloud Function通过Google PubSub获取计费更新?
解决方案
onPublish不是@google-cloud/pubsub库中Topic对象的方法,要接收Google Play计费更新的PubSub消息,你需要通过**订阅(Subscription)**来监听消息,这是PubSub发布-订阅模型的标准流程。
正确实现代码
const { PubSub } = require('@google-cloud/pubsub'); // 初始化PubSub客户端,传入你的项目ID const pubsub = new PubSub({ projectId: 'MyProjectID' }); const TOPIC_NAME = 'GOOGLE_PLAY_PUBSUB_BILLING_TOPIC'; const SUBSCRIPTION_NAME = 'billing-updates-sub'; // 替换为你的订阅名称(可提前在控制台创建或代码创建) // 获取订阅实例 const subscription = pubsub.topic(TOPIC_NAME).subscription(SUBSCRIPTION_NAME); // 消息处理函数 const handleBillingUpdate = async (message) => { // 解析消息内容(Google Play计费消息是JSON格式) const billingData = JSON.parse(message.data.toString()); // 这里编写你的计费更新处理逻辑 console.log('收到计费更新:', billingData); // 确认消息已处理,避免PubSub重复推送 message.ack(); }; // 监听消息事件 subscription.on('message', handleBillingUpdate); // 监听订阅错误 subscription.on('error', (err) => { console.error('订阅出错:', err); });
关键注意事项
- 提前在Google Cloud控制台为目标主题创建订阅,或通过代码调用
createSubscription方法创建(可取消下方代码注释实现)// pubsub.topic(TOPIC_NAME).createSubscription(SUBSCRIPTION_NAME) // .then(([subscription]) => { // subscription.on('message', handleBillingUpdate); // console.log('订阅已创建并开始监听'); // }) // .catch(err => { // console.error('创建订阅失败:', err); // }); - 确保运行代码的服务账号拥有
roles/pubsub.subscriber权限 - 本地运行时需设置环境变量
GOOGLE_APPLICATION_CREDENTIALS,指向你的服务账号密钥文件路径 - 处理完消息必须调用
message.ack(),否则PubSub会在超时后重新推送该消息
内容的提问来源于stack exchange,提问作者SwiftiSwift
相关产品推荐
相关产品推荐

