Использование Cloud Run по теме PubSub - PullRequest
1 голос
/ 05 июля 2019

Мне было непонятно, как использовать Cloud Run для темы PubSub для среднесрочных задач (конечно, в пределах срока Cloud Run.)

Давайте посмотрим на этот пример, взятый из учебных пособий [1]:

app.post('/', (req, res) => {

  if (!req.body) {
    const msg = 'no Pub/Sub message received'
    console.error(`error: ${msg}`)
    res.status(400).send(`Bad Request: ${msg}`)
    return
  }
  if (!req.body.message) {
    const msg = 'invalid Pub/Sub message format'
    console.error(`error: ${msg}`)
    res.status(400).send(`Bad Request: ${msg}`)
    return
  }

  const pubSubMessage = req.body.message
  const name = pubSubMessage.data
    ? Buffer.from(pubSubMessage.data, 'base64').toString().trim()
    : 'World'

  console.log(`Hello ${name}!`)
  res.status(204).send()
})

Я сомневаюсь: должен ли он возвращать только HTTP 204 после , задача завершается, в противном случае задача будет внезапно завершена?

1 - https://cloud.google.com/run/docs/tutorials/pubsub

1 Ответ

2 голосов
/ 06 июля 2019

Я сомневаюсь: должен ли он возвращать HTTP 204 только после завершения задачи, в противном случае задача будет внезапно завершена?

У вас нет выбора. Если вы вернетесь до того, как ваша задача / задача завершится, процессор будет работать на нуле, и в вашем экземпляре Cloud Run ничего не произойдет.

В вашем примере вы просто обрабатываете сообщение pub / sub и извлекаете имя. Если вы вернетесь до того, как это будет сделано, имя не будет обработано.

Cloud Run предназначен для системы HTTP-запросов / ответов. Это означает, что обработка начинается, когда вы получаете HTTP-запрос (GET, POST, PUT и т. Д.) И заканчивается, когда ваш код возвращает HTTP-ответ (или просто возвращается без ответа). Вы можете попытаться создать фоновые потоки, но нет гарантии, что они будут выполняться, когда ваша основная функция вернется.

...