Таймауты. Любой сетевой вызов может зависнуть. Без таймаута поток и соединение заняты навсегда, и медленная зависимость останавливает весь сервис.
Повторы снимают кратковременные сбои: экспоненциальная отсрочка (100, 200, 400 мс…) и джиттер — случайная добавка, чтобы клиенты не повторяли синхронно. Повторять только временные ошибки (таймаут, 503) и ограничивать: 2–3 попытки, бюджет повторов.
Идемпотентность делает повтор безопасным: операция с тем же ключом выполняется один раз. Клиент передаёт Idempotency-Key, сервер сохраняет ключ и результат в одной транзакции с бизнес-изменением. Для сообщений из брокера (доставка «хотя бы один раз») — таблица обработанных id или естественно идемпотентные операции (UPSERT, «установить статус», а не «прибавить»).
Circuit breaker — если зависимость стабильно отказывает, перестать её вызывать на время (быстрый отказ или запасной ответ), потом пробовать осторожно. Защищает и себя, и упавший сервис.
Изоляция (bulkhead) — отдельные пулы для разных зависимостей, чтобы одна медленная не съела все потоки.
Очередь недоставленных (DLQ) — сообщение, которое падает после N попыток, перекладывается в отдельную очередь, чтобы не блокировать поток и не теряться; оттуда его разбирают и переигрывают.
Согласованность данных и событий — transactional outbox: событие пишется в ту же транзакцию, что и данные, а отправляется отдельным процессом.