从后台发布的功能发布订阅?
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
}
})
我使用 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
}
})