В принципе вариант с "очередями" достаточно удобен:
в исходящую очередь выкладываются изменения по триггерам, потом, позже из этой очереди записи выгребаются неким обработчиком, возможно с "украшательством" в виде добавления в выгрузку референсных данных и т.п.
Там же можно хранить число попыток отправки и lasterror
Из плюсов - в грязную очередь могут влететь несколько записей на выгрузку одной и той же сущности (к примеру манагер вбил комментарий к клиенту, сохранил, подумал, поправил коммент и снова сохранил = 2 записи), а к отправке уже можно группировать по id сущностей (если конечно по логике не требуется историчность).
Входящая очередь - тут собственно получить-сложить-обработать (принять), где тоже во-первых может быть ошибка. Ну и как вариант - некий doorbell с "той стороны" по появлению данных - т.е. можно не по таймерам проверять наличие, а отрабатывать по сигналу.