Submissions Queue
Type de ressource : Binding Cloudflare (Queue)
Fichier source :services/form-handler/wrangler.toml,services/submission-processor/wrangler.toml
Statut : Actif
1. Vue dâensemble
Section titled â1. Vue dâensembleâ1.1. Description
Section titled â1.1. DescriptionâQueue Cloudflare pour le traitement asynchrone des soumissions de formulaire. Le Worker form-handler (producer) envoie les soumissions validĂ©es dans la Queue, et le Worker submission-processor (consumer) traite les messages et crĂ©e des documents dans Sanity.
1.2. Objectif
Section titled â1.2. Objectifâ- DĂ©coupler la validation du traitement asynchrone
- Fournir une rĂ©silience asynchrone sans bloquer lâutilisateur
- Permettre le retry exponentiel en cas dâerreur Sanity
- Optimiser les performances via le traitement par batch
1.3. Caractéristiques
Section titled â1.3. CaractĂ©ristiquesâ| PropriĂ©tĂ© | Valeur |
|---|---|
| Type de binding | Queue |
| Nom du binding | SUBMISSIONS_QUEUE |
| Nom de la ressource | submissions-queue-dev (dev), submissions-queue-prod (production) |
| Environnements | Development, Production |
| Workers consommateurs | form-handler (producer), submission-processor (consumer) |
2. Architecture et flux
Section titled â2. Architecture et fluxâ[Form Handler Worker] â âą Envoi de la soumission validĂ©e âŒ[Queue Cloudflare (submissions-queue)] â âą File d'attente asynchrone âŒ[Submission-processor Worker] â âą Consommation par batch (max 10) âŒ[Sanity CMS] â âą CrĂ©ation du document submission2.2. Composants impliquĂ©s
Section titled â2.2. Composants impliquĂ©sâ| Composant | RĂŽle | Type |
|---|---|---|
| form-handler | Producer (envoie les soumissions) | Worker L3 |
| SUBMISSIONS_QUEUE | File dâattente asynchrone | Cloudflare Service |
| submission-processor | Consumer (traite les soumissions) | Worker L3 |
| Sanity API | Stockage des soumissions | Service tiers |
3. Configuration
Section titled â3. Configurationâ3.1. Configuration Wrangler (wrangler.toml)
Section titled â3.1. Configuration Wrangler (wrangler.toml)â# services/form-handler/wrangler.toml (Producer)[[queues.producers]]queue = "submissions-queue-dev"binding = "SUBMISSIONS_QUEUE"
[env.dev][[env.dev.queues.producers]]queue = "submissions-queue-dev"binding = "SUBMISSIONS_QUEUE"
[env.production][[env.production.queues.producers]]queue = "submissions-queue-prod"binding = "SUBMISSIONS_QUEUE"# services/submission-processor/wrangler.toml (Consumer)[[env.dev.queues.consumers]]queue = "submissions-queue-dev"max_batch_size = 10max_batch_timeout = 30
[[env.production.queues.consumers]]queue = "submissions-queue-prod"max_batch_size = 10max_batch_timeout = 303.2. Création de la ressource
Section titled â3.2. CrĂ©ation de la ressourceâ# CrĂ©ation des Queueswrangler queues create submissions-queue-devwrangler queues create submissions-queue-prod3.3. Variables dâenvironnement associĂ©es
Section titled â3.3. Variables dâenvironnement associĂ©esâ| Variable | Description | Obligatoire | Valeur par dĂ©faut |
|---|---|---|---|
ENVIRONMENT |
Environnement (dev/production) | â | dev |
4. Implémentation
Section titled â4. ImplĂ©mentationâ4.1. Interface TypeScript du binding
Section titled â4.1. Interface TypeScript du bindingâ// Interface Env du Worker producer (form-handler)export interface Env { SUBMISSIONS_QUEUE: Queue; ENVIRONMENT: string;}
// Interface Env du Worker consumer (submission-processor)export interface Env { SUBMISSIONS_QUEUE: Queue; ENVIRONMENT: string; SANITY_PROJECT_ID: string; SANITY_DATASET: string; SANITY_API_WRITE_TOKEN?: string;}4.2. Utilisation dans un Worker producteur (form-handler)
Section titled â4.2. Utilisation dans un Worker producteur (form-handler)â// Envoi dans la Queueconst submission = { name: validatedData.name, email: validatedData.email, message: validatedData.message, submittedAt: new Date().toISOString(), id: crypto.randomUUID(), environment: env.ENVIRONMENT,};
await env.SUBMISSIONS_QUEUE.send(submission);4.3. Utilisation dans un Worker consommateur (submission-processor)
Section titled â4.3. Utilisation dans un Worker consommateur (submission-processor)âexport default { async queue(batch: MessageBatch<SubmissionMessage>, env: Env): Promise<void> { console.log(`Processing batch of ${batch.messages.length} submissions`);
const sanityClient = createClient({ projectId: env.SANITY_PROJECT_ID, dataset: env.SANITY_DATASET, apiVersion: '2024-01-01', token: env.SANITY_API_WRITE_TOKEN, useCdn: false, });
for (const message of batch.messages) { try { const submission = message.body as SubmissionMessage; console.log(`Processing submission ${submission.id} from ${submission.email}`);
// Create document in Sanity const result = await sanityClient.create({ _type: 'submission', name: submission.name, email: submission.email, message: submission.message, status: 'pending', submittedAt: submission.submittedAt, processedAt: new Date().toISOString(), });
console.log(`Successfully stored submission ${submission.id} in Sanity with ID: ${result._id}`);
// Acknowledge message message.ack();
} catch (error) { console.error(`Failed to process submission:`, error);
// Retry with exponential backoff message.retry({ delaySeconds: Math.min(60, Math.pow(2, batch.messages.indexOf(message))), }); } } },};5. Cas dâusage spĂ©cifiques
Section titled â5. Cas dâusage spĂ©cifiquesâ5.1. Queue : Fallback asynchrone pour formulaires
Section titled â5.1. Queue : Fallback asynchrone pour formulairesâContexte : Le Worker form-handler utilise une Queue pour traiter les soumissions de formulaire de maniĂšre asynchrone.
Configuration :
- Nom de la Queue :
submissions-queue-dev(dev),submissions-queue-prod(production) - Binding :
SUBMISSIONS_QUEUE - Batch size : 10 messages
- Batch timeout : 30 secondes
- Rationale : RĂ©silience asynchrone sans bloquer lâutilisateur
Flux :
- User soumet le formulaire via Astro
- Astro envoie vers
/api/submit /api/submitdélÚgue à form-handler- form-handler valide via Zod
- form-handler envoie dans la Queue
- submission-processor consomme la Queue
- submission-processor crée le document Sanity
6. Sécurité et accÚs
Section titled â6. SĂ©curitĂ© et accĂšsâ6.1. ContrĂŽle dâaccĂšs
Section titled â6.1. ContrĂŽle dâaccĂšsâ| Binding | AccĂšs | Rationale |
|---|---|---|
| SUBMISSIONS_QUEUE | Workers uniquement | Pas dâaccĂšs direct depuis le client |
6.2. RÚgles de sécurité
Section titled â6.2. RĂšgles de sĂ©curitĂ©â- â Les bindings sont accessibles uniquement depuis les Workers (pas depuis le navigateur)
- â Les Queues ne sont pas accessibles publiquement (Workers uniquement)
6.3. Rotation des secrets
Section titled â6.3. Rotation des secretsâNon applicable - aucun secret nâest utilisĂ© dans ce binding.
7. Performance et limites
Section titled â7. Performance et limitesâ7.1. Limites par type de binding
Section titled â7.1. Limites par type de bindingâ| Binding | Limite | Rationale |
|---|---|---|
| Queue | 5 000 messages/s, 10 MB max par message | Quota Cloudflare |
7.2. Optimisations appliquées
Section titled â7.2. Optimisations appliquĂ©esâ- â Utiliser les Queues pour le traitement asynchrone (Ă©vite les timeouts)
- â Traitement par batch (max 10 messages)
- â Retry exponentiel pour les erreurs (max 60s)
7.3. Coûts
Section titled â7.3. CoĂ»tsâ| Binding | ModĂšle de coĂ»t | Estimation mensuelle |
|---|---|---|
| Queue | $0.40/1M messages | ~$1-2 |
8. Monitoring et observabilité
Section titled â8. Monitoring et observabilitĂ©â8.1. MĂ©triques clĂ©s
Section titled â8.1. MĂ©triques clĂ©sâNon implĂ©mentĂ© - aucune mĂ©trique ou alerte nâest configurĂ©e.
8.2. Commandes de debug
Section titled â8.2. Commandes de debugâ# Inspection Queuewrangler queues info submissions-queue-dev
# Logs en temps réelwrangler tail form-handlerwrangler tail submission-processor9. Débogage et troubleshooting
Section titled â9. DĂ©bogage et troubleshootingâ9.1. ProblĂšmes courants
Section titled â9.1. ProblĂšmes courantsâ| SymptĂŽme | Cause probable | Solution |
|---|---|---|
| âBinding not foundâ | Binding mal configurĂ© dans wrangler.toml | VĂ©rifier la configuration et redĂ©ployer |
| âQueue fullâ | Consommateur trop lent | Augmenter max_batch_size ou ajouter des consommateurs |
| Messages non consommés | Consumer non déployé | Vérifier le déploiement de submission-processor |
9.2. Tests manuels
Section titled â9.2. Tests manuelsâ# Test Queue (envoi manuel via curl)curl -X POST http://localhost:8789/test-direct \ -H "Content-Type: application/json" \ -d '{"name":"Test","email":"test@example.com","message":"Test message"}'10. Bonnes pratiques
Section titled â10. Bonnes pratiquesâ10.1. Architecture
Section titled â10.1. Architectureâ- â Utiliser les Queues pour le traitement asynchrone (formulaires, webhooks)
- â SĂ©parer les queues par environnement (production, staging)
- â Documenter les bindings dans ce fichier
10.2. Code
Section titled â10.2. Codeâ- â Typer strictement les bindings dans lâinterface Env
- â GĂ©rer les erreurs de maniĂšre explicite (try/catch)
- â Logger les opĂ©rations critiques pour lâaudit
- â Utiliser le retry exponentiel pour les erreurs temporaires
10.3. Performance
Section titled â10.3. Performanceâ- â Utiliser les Queues pour Ă©viter les timeouts
- â Traitement par batch pour optimiser les performances
- â Surveiller les mĂ©triques de performance (latence, dĂ©bit)
10.4. Sécurité
Section titled â10.4. SĂ©curitĂ©â- â Ne jamais exposer les bindings cĂŽtĂ© client
- â Les Queues ne sont pas accessibles publiquement
11. Ăvolutions et roadmap
Section titled â11. Ăvolutions et roadmapâ11.1. AmĂ©liorations planifiĂ©es
Section titled â11.1. AmĂ©liorations planifiĂ©esâ- Configuration de monitoring (mĂ©triques, alertes)
- Ajout dâune Dead Letter Queue (DLQ) pour les messages Ă©chouĂ©s
- Ajout de métriques de profondeur de queue
11.2. Limitations connues
Section titled â11.2. Limitations connuesâ- â Les Queues ont une limite de 10 MB par message
- â Pas de Dead Letter Queue (DLQ) configurĂ©e
- â Pas de monitoring configurĂ©
12. Ressources liées
Section titled â12. Ressources liĂ©esâ- Documentation Cloudflare Queues : Getting Started
- Workers consommateurs :
services/form-handler/services/submission-processor/
- Fichiers concernés :
services/form-handler/wrangler.tomlservices/submission-processor/wrangler.toml- Configuration Dashboard Cloudflare â Queues
13. Historique des modifications
Section titled â13. Historique des modificationsâ| Date | Version | Description | Auteur |
|---|---|---|---|
| 2026-09-15 | 1.0 | Création initiale | Devin |