1. Demandez à la base de données, pas au log
Trois des quatre causes probables ne sont pas du tout du routage, et la base de données dit laquelle en une requête.2. Un fournisseur est-il seulement bindé ?
Un attrape-tout parfait pointant sur un fournisseur qui n’est pas connecté ne livre rien, et ressemble à un bug de routage sous tous les angles.3. Le client en a-t-il jamais été informé ?
Non. Cela vaut la peine d’être intériorisé, car cela façonne chaque conversation avec un client. La réponse de soumission est envoyée avant que le routage ne s’exécute. Un échec de routage ne peut donc jamais faire surface comme une erreur sur lesubmit_sm du client ou son appel HTTP — il ne
peut apparaître que plus tard, en tant qu’accusé de livraison et ligne cdr_rejected.
4. Le log est-il silencieux parce que c’est corrigé, ou parce qu’il l’a déjà dit ?
routing.rule.broken est journalisé une fois par règle, pas une fois par message —
délibérément, car sans garde, ce serait une ligne par message par tentative sur exactement le trafic
qui va déjà mal.
La conséquence est un piège : un log silencieux n’est pas la preuve que le problème est parti. Le
compteur ne se remet à zéro que lorsqu’une nouvelle table de routage est publiée.
Donc après avoir corrigé une règle, guettez que la ligne réapparaisse, pas qu’elle reste absente.
La forme fiable de la même question est le nombre :
Que capturer avant de changer quoi que ce soit
Si vous allez demander de l’aide, ou si vous vous attendez à expliquer ceci plus tard, prenez ces quatre éléments maintenant — ils sont tous peu coûteux et trois d’entre eux sont détruits par un redémarrage :1
La ventilation des refus
La requête
cdr_rejected ci-dessus, avec ses compteurs.2
/ops/health, complet
last_error, last_submit_error, routing_failed_queue et routing_retry_queue en un seul
instantané.3
Les lignes WARN et ERROR
Pas tout le log —
routing.rule.broken, message.dropped, listener.bind.failed,
message.submit.response.4
Un numéro de série d'un message qui a échoué
Tout ce qui est en aval est plus facile quand on peut tracer un vrai message plutôt qu’une classe
de messages.
Voir aussi
Rien n'est livré
Quand c’est vraiment le routage.
Refus
Chaque raison
cdr_rejected, et ce qui la corrige.