Сервис А сообщает Б, что пользователь пополнил на стороне А счёт, номер этой транзакции такой-то.
Сервис Б в ответ сообщает, что транзакция обработана, ну или о какой-то ошибке в строгом формате.
Если сервис А не получает такое сообщение, то через некоторое время отправляет сообщение повторно с тем же самым номером транзакции. Если сервис Б находит такую транзакцию у себя - отвечает, что событие уже обработано. Если не находит - обрабатывает штатно как новую транзакцию.
Сервис А ставит операции статус "выполнено" только после получения ответа от Б, пока ответа нет - служебный статус "обрабатывается"