Я использую несколько облачных решений Google для проекта:
- Движок приложений Google (Go 1.11)
- Облачные функции Google (Go 1.11)
- GoogleCloud Pub / Sub (Название темы: работники)
Мой проект App Engine просто о публикации сообщений в теме "работники".
Функция My Cloud должна быть запущена, когда Pub /Sub получает сообщение на тему «Работники».
После выполнения некоторых тестов с интенсивной нагрузкой я вижу, что не все мои работники вызываются.
Тест собирался выбросить пакет200 сообщений каждые 15 секунд для достижения 100 000 опубликованных сообщений (должно быть столько же вызовов функций) в конце.
Нет проблем для отправки сообщений в тему, но когда я посмотрел вИсследователь метрик Google Stackdriver (Метрики основаны на статусе выполнения облачной функции). Я вижу, что некоторые рабочие вызовы отсутствуют.
Код 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:
Вот обозреватель метрик для облакасчетчик вызовов функций: