# Dépannage : plan asynchrone

> Publications, abonnements, isolation des canaux et chiffrement par champ : le symptôme, sa cause et quoi faire.

Dépannage - Depuis la version 1.5.0 - Flexway v1.7.1 - https://flexway.io/docs/operations-troubleshooting-async/

> Guide d'exploitation : configurer, déployer et observer la passerelle. Ce que fait la fonctionnalité côté produit : [guide produit](https://flexway.io/docs/product-overview/) ; l'appeler : [guide développeur](https://flexway.io/docs/developer-overview/).

Les refus et erreurs de l'écouteur Kafka (clients Kafka natifs) ont leur propre tableau : [Clients Kafka : référence](https://flexway.io/docs/operations-kafka-reference/).

## Publier et consommer

| Symptôme | Cause | Action |
| --- | --- | --- |
| `POST` d'une porte `x-flexway-publish` : `504 upstream_timeout` | Le courtier n'a pas accusé dans le budget : **issue inconnue**, le message a pu être écrit | Renvoyer avec la même `Idempotency-Key` ; vérifier la santé du courtier, élargir `timeout` |
| `503 overloaded` sur une publication | Le tampon `max_in_flight` du courtier est plein : il accuse moins vite qu'on ne publie | Lire `flexway_async_publish_duration_seconds` ; relever `max_in_flight` ou la capacité du courtier |
| `502 upstream_error` sur une publication | Le courtier a refusé : ACL, sujet absent (la passerelle n'en crée jamais), message rejeté ; AMQP : aucune file ne prend le message | Créer le sujet du tenant, accorder l'écriture au principal de la passerelle, lier une file à l'échange |
| Démarrage refusé : `is consumed and isolates no tenant` | Une consommation sur un canal ni lié au tenant, ni filtré sur l'en-tête `tenant` | `x-flexway-bind: tenant` sur un paramètre du canal, ou l'en-tête `tenant` dans `headers` de chaque message |
| Un abonné WebSocket reçoit un message deux fois | Au moins une fois : pas d'accusé dans `ack_timeout`, ou une coupure avant l'accusé | Accuser chaque `id` (`{"ack": "<id>"}`) ; dédupliquer sur `source` + `id` |
| Démarrage refusé : `reads the schema registry's wire format and is isolated by the tenant attribute alone` | Une consommation d'un canal au format filaire du registre filtrée sur l'attribut `tenant`, sans liaison : les messages d'un producteur Kafka ordinaire n'ont aucun attribut | Lier le canal au tenant (`x-flexway-bind: tenant`, adresse `{tenant}.<sujet>`), ou le déclarer public (`x-flexway-public: true`) |

## Chiffrement par champ

| Symptôme | Cause | Action |
| --- | --- | --- |
| Démarrage refusé : `kms.key "...": kms key absent or unusable` | La clé du chiffrement par champ n'existe pas au KMS (faute de frappe) ou ne peut pas envelopper (clé Vault non dérivée) | Corriger `kms.key` ou créer la clé - [Chiffrement par champ](https://flexway.io/docs/operations-kafka-encryption/) |
| Consommateurs Kafka en `CORRUPT_MESSAGE` après un changement de `kms.key` | Les enregistrements écrits avant nomment l'ancienne clé | La déclarer dans `kms.previous_keys` - [Chiffrement par champ](https://flexway.io/docs/operations-kafka-encryption/) |
