85 lines
5.0 KiB
XML
85 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">Жизненный цикл учебного сообщения очереди</title>
|
|
<desc id="desc">Вертикальная схема: producer создаёт конверт, consumer валидирует вход, временная причина получает ограниченный retry, effect ledger подавляет duplicate, а терминальная причина идёт в ручной маршрут.</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="#9fb7d7"/>
|
|
</marker>
|
|
<style>
|
|
.bg { fill: #0b1324; }
|
|
.card { fill: #14213a; stroke: #42658f; stroke-width: 3; }
|
|
.accent { fill: #173e45; stroke: #48c5be; stroke-width: 3; }
|
|
.warn { fill: #422a30; stroke: #ff9a80; stroke-width: 3; }
|
|
.ok { fill: #1a4136; stroke: #67d5a6; stroke-width: 3; }
|
|
.line { stroke: #9fb7d7; stroke-width: 5; fill: none; marker-end: url(#arrow); }
|
|
.branch { stroke: #ffb270; stroke-width: 5; fill: none; marker-end: url(#arrow); }
|
|
.label { fill: #eaf2ff; font: 600 27px Arial, sans-serif; }
|
|
.body { fill: #d2def2; font: 24px Arial, sans-serif; }
|
|
.small { fill: #b6c7e3; font: 22px Arial, sans-serif; }
|
|
.title { fill: #ffffff; font: 700 34px Arial, sans-serif; }
|
|
.tag { fill: #87e5db; font: 700 21px Arial, sans-serif; letter-spacing: 1px; }
|
|
</style>
|
|
</defs>
|
|
<rect class="bg" width="720" height="1600" rx="32"/>
|
|
<text x="360" y="62" text-anchor="middle" class="title">Жизненный цикл задачи</text>
|
|
<text x="360" y="96" text-anchor="middle" class="small">учебный контракт, не схема конкретного broker</text>
|
|
|
|
<rect x="80" y="140" width="560" height="155" rx="22" class="card"/>
|
|
<text x="115" y="182" class="tag">1 · СОЗДАТЬ</text>
|
|
<text x="115" y="224" class="label">Конверт сообщения</text>
|
|
<text x="115" y="259" class="body">id · effectKey · sequenceKey · schema</text>
|
|
<path d="M360 295 L360 342" class="line"/>
|
|
|
|
<rect x="80" y="360" width="560" height="160" rx="22" class="accent"/>
|
|
<text x="115" y="403" class="tag">2 · ПРОВЕРИТЬ</text>
|
|
<text x="115" y="445" class="label">Consumer читает контракт</text>
|
|
<text x="115" y="480" class="body">вход понятен и допустим?</text>
|
|
<path d="M360 520 L360 567" class="line"/>
|
|
|
|
<rect x="80" y="585" width="560" height="154" rx="22" class="card"/>
|
|
<text x="115" y="628" class="tag">3 · КЛАССИФИЦИРОВАТЬ</text>
|
|
<text x="115" y="670" class="label">Выбрать один исход</text>
|
|
<text x="115" y="705" class="body">ready · temporary · terminal / unknown</text>
|
|
|
|
<path d="M222 739 L222 795" class="line"/>
|
|
<path d="M498 739 L498 795" class="branch"/>
|
|
<text x="156" y="778" class="small">ready</text>
|
|
<text x="450" y="778" class="small">terminal</text>
|
|
|
|
<rect x="56" y="815" width="332" height="176" rx="22" class="ok"/>
|
|
<text x="86" y="855" class="tag">4 · EFFECT LEDGER</text>
|
|
<text x="86" y="896" class="label">Проверить effectKey</text>
|
|
<text x="86" y="930" class="body">новый → записать эффект</text>
|
|
<text x="86" y="962" class="body">duplicate → не повторять</text>
|
|
|
|
<rect x="424" y="815" width="240" height="176" rx="22" class="warn"/>
|
|
<text x="454" y="855" class="tag">4 · STOP</text>
|
|
<text x="454" y="896" class="label">Manual</text>
|
|
<text x="454" y="930" class="body">reason</text>
|
|
<text x="454" y="962" class="body">attempts</text>
|
|
|
|
<path d="M222 991 L222 1048" class="line"/>
|
|
<path d="M498 991 L498 1048" class="branch"/>
|
|
|
|
<rect x="56" y="1068" width="332" height="188" rx="22" class="card"/>
|
|
<text x="86" y="1109" class="tag">5 · DELIVERY DECISION</text>
|
|
<text x="86" y="1152" class="label">Подтвердить запуск</text>
|
|
<text x="86" y="1187" class="body">после проверки ledger</text>
|
|
<text x="86" y="1220" class="small">не второй effect</text>
|
|
|
|
<rect x="424" y="1068" width="240" height="188" rx="22" class="warn"/>
|
|
<text x="454" y="1109" class="tag">5 · OPERATOR</text>
|
|
<text x="454" y="1152" class="label">Проверить</text>
|
|
<text x="454" y="1187" class="body">исправить вход,</text>
|
|
<text x="454" y="1220" class="body">отменить, replay</text>
|
|
|
|
<path d="M222 1256 L222 1312" class="line"/>
|
|
<path d="M498 1256 L498 1312" class="branch"/>
|
|
|
|
<rect x="80" y="1334" width="560" height="174" rx="22" class="accent"/>
|
|
<text x="115" y="1377" class="tag">ОГРАНИЧЕНИЕ</text>
|
|
<text x="115" y="1418" class="label">Retry: известная временная причина</text>
|
|
<text x="115" y="1453" class="body">лимит и backoff заранее заданы</text>
|
|
<text x="115" y="1486" class="small">иначе — manual route</text>
|
|
</svg>
|