我正在为一个项目使用很少的Google云解决方案:
我的App Engine项目只是关于将消息发布到“工人”主题。
发布/订阅收到有关“工人”主题的消息时,应触发My Cloud功能。
运行了一些密集的负载测试后,我看到不是我的所有工作程序都被调用。
该测试即将每15秒抛出200条消息,最后达到总共10万条已发布消息(应该是相同数量的函数调用)。
向该主题发送消息没有问题,但是当我查看Google Stackdriver Metrics资源管理器(基于云功能的执行状态的指标)时,我发现缺少某些工作程序调用。
发布消息的App Engine代码:
func PublishMessage(task *models.Task) error {
if task == nil {
return errors.New("Empty task")
}
pubSubTopic := GetPubSubClient().Topic("workers")
ctx := context.Background()
message, err := json.Marshal(task); if err != nil {
return err
}
result := pubSubTopic.Publish(ctx, &pubsub.Message{
Data: message,
})
id, err := result.Get(ctx)
if err != nil {
return err
}
log.Printf("Published a message; msg ID: %v\n", id)
return nil
}
这是我的Google云功能上的代码:
func Run(ctx context.Context, m PubSubMessage) error {
task := &models.Task{}
if err := json.Unmarshal(m.Data, task); err != nil {
return err
}
log.Printf(*task.Name)
return nil
}
编辑1:
这是我部署云功能的方式:
gcloud functions deploy my_worker --runtime go111 --entry-point Run --trigger-topic workers
这是pub / sub的指标浏览器: