← Cloudflare Queues / queues / examples
Публикация в очередь через Workers
В следующем примере показано, как публиковать сообщения в очередь из Worker. В примере используется Worker, который получает полезную нагрузку JSON из тела запроса и записывает её в очередь без изменений, однако в реальном приложении перед постановкой сообщения в очередь обычно требуется больше логики.
Предварительные требования
- A очередь создана через Панель управления Cloudflare ↗ или wrangler CLI.
- A настроен производитель привязка в панели Cloudflare или в файле Wrangler.
Настройте файл Wrangler следующим образом:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "my-worker",
"queues": {
"producers": [
{
"queue": "my-queue",
"binding": "YOUR_QUEUE"
}
]
}
}"$schema" = "./node_modules/wrangler/config-schema.json"
name = "my-worker"
[[queues.producers]]
queue = "my-queue"
binding = "YOUR_QUEUE"1. Создайте Worker
Ниже приведён скрипт Worker:
- Проверяет, что тело запроса является корректным JSON.
- Публикует полезную нагрузку в очередь.
interface Env {
YOUR_QUEUE: Queue;
}
export default {
async fetch(req, env, ctx): Promise<Response> {
// Validate the payload is JSON
// In a production application, we may more robustly validate the payload
// against a schema using a library like 'zod'
let messages;
try {
messages = await req.json();
} catch {
// Return a HTTP 400 (Bad Request) if the payload isn't JSON
return Response.json({ error: "payload not valid JSON" }, { status: 400 });
}
// Publish to the Queue
try {
await env.YOUR_QUEUE.send(messages);
} catch (e) {
const message = e instanceof Error ? e.message : "Unknown error";
console.error(`failed to send to the queue: ${message}`);
// Return a HTTP 500 (Internal Error) if our publish operation fails
return Response.json({ error: message }, { status: 500 });
}
// Return a HTTP 200 if the send succeeded!
return Response.json({ success: true });
},
} satisfies ExportedHandler<Env>;Чтобы развернуть этот Worker:
npx wrangler deploy2. Отправка тестового сообщения
Чтобы убедиться, что сообщение успешно записано в очередь, используйте curl в командной строке:
# Make sure to replace the placeholder with your shared secret
curl -XPOST "https://YOUR_WORKER.YOUR_ACCOUNT.workers.dev" --data '{"messages": [{"msg":"hello world"}]}'{"success":true}Это отправит запрос HTTP POST и в случае успеха вернёт HTTP 200 с success: true тело ответа.
- Если вы получили HTTP 400, значит вы попытались отправить в очередь некорректный JSON.
- Если вы получили HTTP 500, значит сообщение не удалось записать в очередь.
Вы можете использовать wrangler tail для отладки вывода console.log.