паттерны для того, чтобы делать это после транзакции:
https://microservices.io/patterns/data/transactional-outbox.html
https://microservices.io/patterns/data/transaction-log-tailing.html
Также не понятно зачем в этих паттернах привязываться к таблицам из Postgres, чтобы понять, что транзакция выполнилась успешно. Можно же это публиковать после успешного commit транзакции. Также вероятно надо добавить ретраи на все это дело.
Транзакции блокируют другие операции с таблицей, поэтому чем раньше ее закроешь, тем лучше
Вот да! Думал, что есть какие-то другие еще причины)
Если ты публикуешь до завершения транзакции, то в случае роллбека тебе и с публикацией что-то делать придется
Если ты закоммитил транзакцию в БД и потом не смог отправить сообщение в очередь - ты уже не сможешь откатить транзакцию в бд. Т.е. система будет уже в неконсистентном состоянии. В книге Microservices Patterns про это целая глава есть, там более подробно написано.
Обсуждают сегодня