Есть ли способ обеспечить откат транзакции в Mono.zip? - PullRequest
0 голосов
/ 16 апреля 2020

Я работаю над микросервисом уровня оркестровки, где мне нужно параллельно вызывать несколько API различных микросервисов. Для этого я использую subscribeOn(Schedulers.parallel) и подписываюсь на каждый ответ в Mono.zip. Например:

Mono<A> a =  service1.api().subscribeOn(Schedulers.parallel());
Mono<B> b =  service2.api().subscribeOn(Schedulers.parallel());
Mono<C> c =  service3.api().subscribeOn(Schedulers.parallel());
return Mono.zip(a,b,c);

Теперь AFAIK, этот почтовый индекс не будет работать, если любой из a, b ИЛИ c завершится с ошибкой. Предположим, что в третьем вызове что-то пошло не так, я хочу обработать этот случай таким образом, чтобы любая операция, выполненная с помощью service1.api() и service2.api(), могла быть отменена, т.е. откатилась как транзакция.

Я прошу прощения за любое неправильное заявление, которое я сделал, поскольку я немного новичок в Spring WebFlux. Спасибо за всю помощь заранее.

1 Ответ

0 голосов
/ 16 апреля 2020

Я считаю, что нет такого положения для отката отдельных вызовов. Вы можете использовать Mono.zipDelayError, чтобы завершить допустимые вызовы, кроме тех, которые могут быть неудачными. После этого при возврате ошибки вы можете go для отдельного отката транзакции с явной реализацией того же.

...