Pull to refresh

Comments 2

Генератор бы тут идеально подошел

По поводу развилки в конце статьи, мне кажется, здесь стоит разделить сохранение задания и саму доставку в Telegram.
Первую проблему можно закрыть через transactional outbox: в одной транзакции фиксировать изменение состояния и задание на отправку. Отдельный воркер забирает задания и повторяет неудачные попытки. Тогда падение между обновлением метки и постановкой задачи в очередь не приведёт к её потере.
Но остаётся случай, когда Telegram принял sendMessage, а ответ потерялся по таймауту. Повтор может создать дубль, т.к. у Bot API нет документированного механизма идемпотентности для этого метода.
Т. е. outbox позволяет надёжнее хранить и доставлять задания, но не даёт exactly-once для самих сообщений. Для неопределённого исхода всё равно нужна отдельная политика. Поделитесь, пожалуйста, как вы решаете именно этот случай?

Sign up to leave a comment.

Articles