У меня есть Spring Cloud Stream приложение, которое получает события от RabbitMQ с использованием Rabbit Binder .Мое приложение может быть кратко изложено следующим образом:
@Transactional
@StreamListener(MySink.SINK_NAME)
public void processEvents(Flux<Event> events) {
// Transform events and store them in MongoDB using
// spring-boot-data-mongodb-reactive
...
}
Проблема в том, что не похоже, что @Transactional
работает с Spring Cloud Stream (или, по крайней мере, это мое впечатление), так как если при записи есть исключениедля MongoDB событие, кажется, уже подтверждено: отправлено в RabbitMQ, и операция не повторяется.
Учитывая, что я хочу добиться в основном той же функциональности, что и при использовании @Transactional
вокруг функции с spring-amqp :
- Должен ли яВручную ACK сообщения в RabbitMQ при использовании Spring Cloud Stream с Rabbit Binder?
- Если это так, как мне этого добиться?