Files
progcode/web/public/assets/editorial/2021/queue-poison-diagnosis-2021.svg
T
huncode 8cdf52e111
Build and deploy / deploy (push) Successful in 14s
revise March 2021 queue articles
2026-07-31 12:18:44 +03:00

82 lines
5.0 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 1600" role="img" aria-labelledby="title desc">
<title id="title">Диагностика poison message и ручной маршрут</title>
<desc id="desc">Вертикальное дерево решений: сначала проверяется effect ledger, затем классифицируется причина; только известная временная причина получает ограниченный retry, а terminal и unknown случаи сохраняются для manual review.</desc>
<defs>
<marker id="arrow" viewBox="0 0 12 12" refX="10" refY="6" markerWidth="10" markerHeight="10" orient="auto-start-reverse">
<path d="M 1 1 L 11 6 L 1 11 z" fill="#b9c8e4"/>
</marker>
<style>
.bg { fill: #141321; }
.card { fill: #23233c; stroke: #5c6294; stroke-width: 3; }
.check { fill: #173943; stroke: #55c9ca; stroke-width: 3; }
.retry { fill: #3d3524; stroke: #e8c16d; stroke-width: 3; }
.manual { fill: #482f38; stroke: #ff9ca5; stroke-width: 3; }
.ok { fill: #254234; stroke: #77d5a2; stroke-width: 3; }
.line { stroke: #b9c8e4; stroke-width: 5; fill: none; marker-end: url(#arrow); }
.retryline { stroke: #e8c16d; stroke-width: 5; fill: none; marker-end: url(#arrow); }
.manualline { stroke: #ff9ca5; stroke-width: 5; fill: none; marker-end: url(#arrow); }
.title { fill: #ffffff; font: 700 34px Arial, sans-serif; }
.tag { fill: #a8def8; font: 700 21px Arial, sans-serif; letter-spacing: 1px; }
.label { fill: #f5f6ff; font: 600 27px Arial, sans-serif; }
.body { fill: #d9dff3; font: 24px Arial, sans-serif; }
.small { fill: #bbc6df; font: 22px Arial, sans-serif; }
</style>
</defs>
<rect width="720" height="1600" rx="32" class="bg"/>
<text x="360" y="62" text-anchor="middle" class="title">Poison message: путь решения</text>
<text x="360" y="96" text-anchor="middle" class="small">остановить цикл, сохранить контекст</text>
<rect x="80" y="140" width="560" height="150" rx="22" class="card"/>
<text x="115" y="183" class="tag">1 · FAILURE</text>
<text x="115" y="225" class="label">Consumer не завершил задачу</text>
<text x="115" y="260" class="body">сохранить id, effectKey, attempt, reason</text>
<path d="M360 290 L360 345" class="line"/>
<rect x="80" y="365" width="560" height="164" rx="22" class="check"/>
<text x="115" y="408" class="tag">2 · EFFECT LEDGER</text>
<text x="115" y="450" class="label">Эффект уже записан?</text>
<text x="115" y="485" class="body">да → не повторять effect; решить delivery</text>
<text x="115" y="516" class="small">нет → перейти к классификации причины</text>
<path d="M218 529 L218 591" class="line"/>
<path d="M502 529 L502 591" class="line"/>
<text x="144" y="570" class="small">duplicate</text>
<text x="456" y="570" class="small">новый effect</text>
<rect x="54" y="611" width="324" height="146" rx="22" class="ok"/>
<text x="84" y="652" class="tag">3 · ACK</text>
<text x="84" y="694" class="label">Suppress duplicate</text>
<text x="84" y="727" class="body">нового эффекта нет</text>
<rect x="410" y="611" width="256" height="146" rx="22" class="card"/>
<text x="440" y="652" class="tag">3 · CLASSIFY</text>
<text x="440" y="694" class="label">Причина?</text>
<text x="440" y="727" class="body">known / terminal</text>
<path d="M538 757 L538 813" class="line"/>
<rect x="410" y="833" width="256" height="152" rx="22" class="retry"/>
<text x="440" y="874" class="tag">4 · TEMPORARY</text>
<text x="440" y="916" class="label">Controlled retry</text>
<text x="440" y="949" class="body">limit + backoff</text>
<path d="M538 985 L538 1040" class="retryline"/>
<rect x="410" y="1060" width="256" height="151" rx="22" class="manual"/>
<text x="440" y="1101" class="tag">5 · EXHAUSTED</text>
<text x="440" y="1143" class="label">Manual review</text>
<text x="440" y="1176" class="body">no more retry</text>
<path d="M360 757 L360 1084 L392 1084" class="manualline"/>
<text x="95" y="1015" class="small">terminal or unknown:</text>
<text x="95" y="1047" class="small">не угадывать retry</text>
<path d="M538 1211 L538 1266" class="manualline"/>
<rect x="80" y="1286" width="560" height="170" rx="22" class="manual"/>
<text x="115" y="1329" class="tag">6 · OPERATOR DECISION</text>
<text x="115" y="1371" class="label">Исправить вход / отменить / replay</text>
<text x="115" y="1406" class="body">проверить effectKey перед повтором</text>
<text x="115" y="1437" class="small">record хранит reason, attempts и effectKey</text>
<rect x="80" y="1480" width="560" height="76" rx="20" class="card"/>
<text x="360" y="1528" text-anchor="middle" class="small">Диагностика, не конфигурация DLQ.</text>
</svg>