← Cloudflare Queues / queues / konfigurace
Rozhraní JavaScript API
Cloudflare Queues je integrováno s Cloudflare Workers. K odesílání a přijímání zpráv musíte použít Worker.
Worker, který umí odesílat zprávy do fronty, se nazývá Worker producenta, zatímco Worker, který umí zprávy z fronty přijímat, se nazývá Worker konzumenta. Stejný Worker může být zároveň producentem i konzumentem, pokud si to přejete.
V budoucnu plánujeme podporu dalších API, například HTTP koncových bodů pro odesílání či příjem zpráv. Chcete-li nahlásit chybu nebo požádat o novou funkci, přejděte na Cloudflare Community Forums ↗. Chcete-li nám poskytnout zpětnou vazbu, přejděte na #queues ↗ kanál Discord.
Producer
Tato rozhraní API umožňují producentskému Workeru odesílat zprávy do fronty.
Příklad odeslání jedné zprávy do fronty:
export default {
async fetch(req, env, ctx) {
await env.MY_QUEUE.send({
url: req.url,
method: req.method,
headers: Object.fromEntries(req.headers),
});
return new Response("Sent!");
},
};interface Env {
readonly MY_QUEUE: Queue;
}
export default {
async fetch(req, env, ctx): Promise<Response> {
await env.MY_QUEUE.send({
url: req.url,
method: req.method,
headers: Object.fromEntries(req.headers),
});
return new Response("Sent!");
},
} satisfies ExportedHandler<Env>;from workers import Response, WorkerEntrypoint
class Default(WorkerEntrypoint):
async def fetch(self, request):
await self.env.MY_QUEUE.send({
"url": request.url,
"method": request.method,
"headers": dict(request.headers),
})
return Response("Sent!")Rozhraní Queues API také umožňuje zapisovat více zpráv najednou:
const sendResultsToQueue = async (results, env) => {
const batch = results.map((value) => ({
body: value,
}));
await env.MY_QUEUE.sendBatch(batch);
};const sendResultsToQueue = async (results: Array<unknown>, env: Env) => {
const batch: MessageSendRequest[] = results.map((value) => ({
body: value,
}));
await env.MY_QUEUE.sendBatch(batch);
};async def send_results_to_queue(results, env):
batch = [
{"body": value}
for value in results
]
await env.MY_QUEUE.sendBatch(batch)Queue
Vazba, která producentovi umožňuje odesílat zprávy do fronty.
interface Queue<Body = unknown> {
send(body: Body, options?: QueueSendOptions): Promise<QueueSendResult>;
sendBatch(messages: Iterable<MessageSendRequest<Body>>, options?: QueueSendBatchOptions): Promise<QueueSendResult>;
metrics(): Promise<QueueMetrics>;
}-
send(body: unknown, options?: {contentType?: QueuesContentType })Promise<QueueSendResult>- Odešle zprávu do fronty. Tělo může mít libovolný typ podporovaný algoritmus strukturovaného klonování ↗, pokud je jeho velikost menší než 128 KB.
- Jakmile se promise vyřeší, je potvrzeno, že zpráva byla zapsána na disk.
- Vrátí QueueSendResult obsahující metriky fronty v reálném čase.
-
sendBatch(messages: Iterable<MessageSendRequest<unknown>>, options?: QueueSendBatchOptions)Promise<QueueSendBatchResult>- Odešle dávku zpráv do fronty. Každá položka v zadaném Iterable ↗ musí být podporován algoritmus strukturovaného klonování ↗. Dávka může obsahovat až 100 zpráv, jednotlivé položky jsou však omezeny na 128 KB a celková velikost pole nesmí přesáhnout 256 KB.
- Volitelný
optionsparametr lze použít k použití nastavení (napříkladdelaySeconds) na všechny zprávy v dávce. Viz QueueSendBatchOptions. - Jakmile se promise vyřeší, je potvrzeno, že zprávy byly zapsány na disk.
-
metrics()Promise<QueueMetrics>- Vrací v reálném čase QueueMetrics pro frontu.
MessageSendRequest
Obalový typ používaný pro odesílání dávek zpráv.
interface MessageSendRequest<Body = unknown> {
body: Body;
contentType?: QueueContentType;
delaySeconds?: number;
}-
bodyunknown- Tělo zprávy.
- Tělo může mít libovolný typ podporovaný algoritmus strukturovaného klonování ↗, pokud je jeho velikost menší než 128 KB.
-
contentTypeQueueContentType- Explicitní typ obsahu zprávy, díky kterému ji lze správně zobrazit v náhledu pomocí Výpis zpráv z dashboardu funkci. Volitelný argument.
- Viz QueuesContentType pro možné hodnoty.
-
delaySecondsnumber- Počet sekund, po které zpozdit zprávu ve frontě, než může být doručena konzumentovi.
- Musí být celé číslo mezi 0 a 86400 (24 hodin).
QueueSendOptions
Volitelná konfigurace použitá při odesílání zprávy do fronty.
-
contentTypeQueuesContentType- Explicitní typ obsahu zprávy, díky kterému ji lze správně zobrazit v náhledu pomocí Výpis zpráv z dashboardu funkci. Volitelný argument.
- Tato možnost je prozatím určena pouze pro interní použití. V budoucnu
contentTypese použije u alternativních typů konzumentů k explicitnímu označení zpráv jako serializovaných, aby je bylo možné zpracovat v požadovaném typu. - Viz QueuesContentType pro možné hodnoty.
-
delaySecondsnumber- Počet sekund, po které zpozdit zprávu ve frontě, než může být doručena konzumentovi.
- Musí být celé číslo mezi 0 a 86400 (24 hodin). Nastavením této hodnoty na nulu výslovně zabráníte zpoždění zprávy, i když je na úrovni fronty nastaveno globální (výchozí) zpoždění.
QueueSendBatchOptions
Volitelná konfigurace použitá při odesílání dávky zpráv do fronty.
-
delaySecondsnumber- Počet sekund, po které zpožďovat zprávy ve frontě, než může být doručena konzumentovi.
- Musí být kladné celé číslo.
QueuesContentType
Union typ obsahující platné typy obsahu zprávy.
// Default: json
type QueuesContentType = "text" | "bytes" | "json" | "v8";- Použijte
"json"k odeslání objektu JavaScriptu, který lze serializovat do JSON. Tento typ obsahu lze zobrazit v náhledu z Cloudflare dashboard ↗.jsontyp obsahu je výchozí. - Použijte
"text"k odesláníString. Tento typ obsahu lze zobrazit v náhledu pomocí Výpis zpráv z dashboardu funkce. - Použijte
"bytes"k odesláníArrayBuffer. Tento typ obsahu nelze zobrazit náhled z Cloudflare dashboard ↗ a zobrazí se zakódovaná v Base64. - Použijte
"v8"k odeslání objektu JavaScriptu, který nelze serializovat do JSON, ale je podporován strukturovaná kopie ↗ (napříkladDateaMap). Tento typ obsahu nelze zobrazit náhled z Cloudflare dashboard ↗ a zobrazí se zakódovaná v Base64.
Pokud zadáte neplatný typ obsahu nebo pokud zadaný typ obsahu neodpovídá skutečnému typu obsahu zprávy, operace odeslání selže s chybou.
QueueSendResult
Výsledek úspěšné operace odeslání.
interface QueueSendResult {
metadata: {
metrics: QueueMetrics;
};
}-
metadataobject- Obsahuje metadata o frontě po operaci odeslání.
-
metadata.metricsQueueMetrics- Metriky fronty v reálném čase. Viz QueueMetrics.
QueueMetrics
Metriky fronty v reálném čase.
interface QueueMetrics {
backlogCount: number;
backlogBytes: number;
oldestMessageTimestamp: number;
}-
backlogCountnumber- Počet zpráv aktuálně ve frontě.
-
backlogBytesnumber- Celková velikost zpráv ve frontě v bajtech.
-
oldestMessageTimestampnumber- Časové razítko (v milisekundách od epoch) nejstarší zprávy ve frontě.
Konzument
Tato rozhraní API umožňují konzumentskému Workeru odebírat zprávy z fronty.
Chcete-li definovat konzumentský Worker, přidejte queue() funkci do výchozího exportu Workeru. To mu umožní přijímat zprávy z fronty.
Ve výchozím nastavení se všechny zprávy v dávce potvrdí, jakmile jsou splněny všechny následující podmínky:
-
queue()funkce vrátila hodnotu. - Pokud
queue()funkce vrátila promise, byl tento promise vyřešen. - Veškeré promises předané do
waitUntil()byly vyřešeny.
Pokud queue() funkce vyvolá výjimku, nebo pokud jí vrácený promise či kterýkoli z promise předaných do waitUntil() byly odmítnuty, celá dávka se považuje za neúspěšnou a bude opakovaně zpracována podle nastavení opakování daného konzumenta.
export default {
async queue(batch, env, ctx) {
for (const message of batch.messages) {
console.log("Received", message.body);
}
},
};interface Env {
// Add your bindings here
}
export default {
async queue(batch, env, ctx): Promise<void> {
for (const message of batch.messages) {
console.log("Received", message.body);
}
},
} satisfies ExportedHandler<Env>;from workers import WorkerEntrypoint
class Default(WorkerEntrypoint):
async def queue(self, batch):
for message in batch.messages:
print("Received", message) env a ctx pole jsou jako popsáno v dokumentaci Workers.
Typy zpráv v TypeScriptu
Zprávy fronty můžete typovat pomocí Queue<T> na producentovi a ExportedHandler<Env, T> na spotřebiteli.
type MyMessage = {
id: string;
};
interface Env {
MY_QUEUE: Queue<MyMessage>;
}
export default {
async queue(batch) {
for (const message of batch.messages) {
console.log(message.body.id);
}
},
} satisfies ExportedHandler<Env, MyMessage>;Pro primitivní zprávy použijte Queue<number> nebo satisfies ExportedHandler<Env, number>. Pokud typ nezadáte, message.body je unknown.
Consumer fronty lze alternativně napsat i pomocí (zastaralé) syntaxe service worker:
addEventListener('queue', (event) => {
event.waitUntil(handleMessages(event));
});V syntaxi service workeru, event poskytuje stejná pole a metody jako MessageBatch, jak je definováno níže, kromě waitUntil() ↗.
MessageBatch
Dávka zpráv odeslaná Workeru konzumenta.
interface MessageBatch<Body = unknown> {
readonly queue: string;
readonly messages: readonly Message<Body>[];
ackAll(): void;
retryAll(options?: QueueRetryOptions): void;
}-
queuestring- Název fronty, ke které tato dávka patří.
-
messagesMessage[]- Pole zpráv v dávce. Pořadí zpráv se dodržuje podle nejlepších možností, není však zaručeno, že bude přesně odpovídat pořadí, ve kterém byly zprávy publikovány.
-
ackAll()void- Označí každou zprávu jako úspěšně doručenou bez ohledu na to, zda váš
queue()obslužná rutina konzumenta vrátí úspěch, nebo ne.
- Označí každou zprávu jako úspěšně doručenou bez ohledu na to, zda váš
-
retryAll(options?: QueueRetryOptions)void- Označí každou zprávu k opakování v další dávce.
- Podporuje volitelný
optionsobjekt.
Message
Zpráva odeslaná Workeru konzumenta.
interface Message<Body = unknown> {
readonly id: string;
readonly timestamp: Date;
readonly body: Body;
readonly attempts: number;
ack(): void;
retry(options?: QueueRetryOptions): void;
}-
idstring- Jedinečné ID zprávy vygenerované systémem.
-
timestampDate- Časové razítko odeslání zprávy.
-
bodyunknown- Tělo zprávy.
- Tělo může mít libovolný typ podporovaný algoritmus strukturovaného klonování ↗, pokud je jeho velikost menší než 128 KB.
-
attemptsnumber- Počet pokusů konzumenta o zpracování této zprávy. Počítání začíná od 1.
-
ack()void- Označí zprávu jako úspěšně doručenou bez ohledu na to, zda váš
queue()obslužná rutina konzumenta vrátí úspěch, nebo ne.
- Označí zprávu jako úspěšně doručenou bez ohledu na to, zda váš
-
retry(options?: QueueRetryOptions)void- Označí zprávu k opakování v další dávce.
- Podporuje volitelný
optionsobjekt.
QueueRetryOptions
Volitelná konfigurace pro označení zprávy nebo dávky zpráv k opakování.
interface QueueRetryOptions {
delaySeconds?: number;
}-
delaySecondsnumber- Počet sekund, po které zpozdit zprávu ve frontě, než může být doručena konzumentovi.
- Musí být kladné celé číslo.
-
Jakmile se promise vyřeší, zprávy jsou zapsány na disk.
- Vrátí QueueSendResult obsahující metriky fronty v reálném čase.