82 lines
5.0 KiB
XML
82 lines
5.0 KiB
XML
<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>
|