クラウド実行プッシュ サブスクリプションを持つ google-cloud-pubsub トピックを使用してメッセージを発行します。クラウド実行サービスは、メッセージを受信するとすぐに 204/200 を送信して確認します。承認にもかかわらず、pubsub は再試行を続けます。この実装は、 https://cloud.google.com/run/docs/tutorials/system-packagesに基づいています。
ack 後に pubsub が再試行しないようにする方法はありますか。これを修正してミドルウェアを実装し、繰り返されるメッセージを拒否する唯一の方法があるかどうか疑問に思っています。
app.post('/deploy/environment', (req, res) => {
try {
if (!req.body) {
const msg = `No Pub/Sub message received`;
logger.error(`error: ${msg}`);
res.status(202).send(`Bad Request: ${msg}`);
return;
}
if (!req.body.message || !req.body.message.data) {
const msg = `Invalid Pub/Sub message format`;
logger.error(`error: ${msg}`);
res.status(202).send(`Bad Request: ${msg}`);
return;
}
const dataUtf8encoded = Buffer.from(req.body.message.data, 'base64').toString('utf8');
logger.info(`Message content: ${dataUtf8encoded}`);
let content;
try {
content = JSON.parse(dataUtf8encoded);
} catch (ex) {
logger.warn('Bad request invalid JSON');
return res.sendStatus(202);
}
if (!content.environmentId) {
const msg = `EnvironmentId is a mandatory parameter`;
logger.error(`error: ${msg}`);
res.status(202).send(`Bad Request: ${msg}`);
return;
} else if (!content.environment) {
const msg = `Environment is a mandatory parameter`;
logger.error(`error: ${msg}`);
res.status(202).send(`Bad Request: ${msg}`);
return;
} else if (!content.roles) {
const msg = `Roles is a mandatory parameter`;
logger.error(`error: ${msg}`);
res.status(202).send(`Bad Request: ${msg}`);
return;
}
res.status(204).send();
runSystemPackage(content.environmentId, content.environment, content.roles);
} catch (err) {
logger.error(`error: ${err.message}`);
res.status(202).send(`${err}`);
}
});
ログ:
"2019-06-12T04:49:44.015789Z" POST /deploy/environment 204 1ms
"2019-06-12T04:49:44.014897Z" Message content: {"environmentId": "5","environment": "pvs5", "roles": ["core"]}
"2019-06-12T03:42:22.251890Z" Message [object Promise] published.
Snippet showing retries:
"2019-06-12T04:57:01.167608Z" POST /deploy/environment 204 1ms
"2019-06-12T04:56:43.233886Z" POST /deploy/environment 204 39ms
"2019-06-12T04:55:33.630202Z" POST /deploy/environment 204 0ms
"2019-06-12T04:55:12.609798Z" POST /deploy/environment 204 0ms