从后台发布的功能发布订阅?

Pubsub from a Function published in the background?

我使用 PubSub 的全部原因是 让我的 Cloud Function 等待,所以事情会自动发生。要从函数发布 topic,代码 Google 文档显示为:

# Publishes a message to a Cloud Pub/Sub topic.
def publish(topic_name,message):

     # Instantiates a Pub/Sub client
    publisher = pubsub_v1.PublisherClient()
    if not topic_name or not message:
        return ('Missing "topic" and/or "message" parameter.', 400)

    # References an existing topic
    topic_path = publisher.topic_path(PROJECT_ID, topic_name)

    message_json = json.dumps({
        'data': {'message': message},
    })
    message_bytes = message_json.encode('utf-8')

    # Publishes a message
    try:
        publish_future = publisher.publish(topic_path, data=message_bytes)
        publish_future.result()  # Verify the publish succeeded
        return 'Message published.'
    except Exception as e:
        print(e)
        return (e, 500)

这意味着函数正在等待响应,但我希望我的函数在此花费 0 秒。我怎样才能发布并忘记?不等待回应? (没有更多的依赖?)

从代码中的注释可以看出,它正在等待确保发布成功。它不会等待任何订阅者对该主题的任何类型的响应。代码等待发布成功是非常重要的,否则消息可能根本不会发送,并且您有可能完全丢失该数据。这是因为 Cloud Functions 在函数 returns.

之后终止代码并锁定 CPU 和 I/O

如果你真的想冒险,你可以尝试删除对 result() 的调用,但如果你想要一个可靠的系统,我认为这不是一个好主意。

您可以将函数安排在一天中的特定时间 运行 或每隔 'interval' 时间。在此示例中,这将进入您的 index.js 文件并部署到您的函数中。

代码会在后台 运行 'every minute'。该错误只会 return 到您在 google 云控制台中的日志。

如果您使用的是 firestore 并且需要管理文档,您可以在文档创建或更新等特定事件上创建函数 运行。

https://firebase.google.com/docs/functions/firestore-events

编辑:不确定此示例是否符合您的用例,但希望此示例有所帮助

exports.scheduledFx = functions.pubsub.schedule('every minute').onRun(async (context) => {

    // Cron time string Description
    // 30 * * * *   Execute a command at 30 minutes past the hour, every hour.
    // 0 13 * * 1   Execute a command at 1:00 p.m. UTC every Monday.
    // */5 * * * *  Execute a command every five minutes.
    // 0 */2 * * *  Execute a command every second hour, on the hour.
 
    
    try {
      //your code here
    
  
    } catch (error) {

      return error

    }
    
})