You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:55:30