Транзакционность

@sergey.novikov @Bronislav https://www.rabbitmq.com/amqp-0-9-1-reference.html#class.tx

3 метода в компоненте

  • УстановитьИспользованиеТранзакции(...)
  • ЗафиксироватьТранзакциюВКанале(...)
  • ОтменитьТранзакциюВКанале(...)

Собственно объект действия “КаналПередачи”

То есть порядок вызова следующий

  • открываем соединение
  • объявляем канал передачи
  • устанавливаем признак использования транзакций - это формально является конструкцией НачатьТранзакцию в первый раз
  • что-то публикуем - в очереди, в точки обмена и т.д.
  • фиксируем или отменяем транзакцию согласно своей логике приложения
    • фиксация или отмена в любом случае закрывает старую и объявляет новую
  • что-то публикуем - в очереди, в точки обмена и т.д.

как то так

P.S. Планируется в релизе 1.3/1.4

До чего дошел прогресс… а это как под низом работает?

Это поддерживается на стороне сервера

Servers SHOULD implement atomic transactions

всем сообщениям в данном канале начинает присваиваться TRAN_ID - которые кстати проставляются в свойствах каждого сообщения.

1 Симпатия

и консьюмер эти сообщения не берет пока TRAN_ID не объявлен как зафиксированная транзакция?

Еще “хуже”…

Внутри транзакции могут происходит события “публикации” и “подтверждения доставки”, то есть не только отправка, но и забор сообщений - если транзакция откатывается,откатываются еще и полученные сообщения как “не полученные”.

Если consumer подписан на очередь где сообщения еще не закомитчены - он их как бы не увидит… Вот только я сейчас проверяю, необходимо ли клиенту для этого также явно указывать что он работает в транзакционном режиме.

1 Симпатия

Клиент вроде как должен сам в props проверять, есть ли TRAN_ID и на основании этого логику строить.

Ой-вей… Надо бы это сначала на стендах обкатать, прежде чем в бой запускать.

Ну так на внутренней конфе и обкатаем

А есть какие-то новости про эти методы?

Заказов не было - осталось в зоне RandD. Распределнные транзакции как-то никого не вдохновили.