При обращении в Spring между сервисами используя reactive-feign происходит потеря данных
Я написал тестовый пример: https://github.com/lexxus2019/reactiveFeign состоящий из двух сервисов: отправляющего и принимающего. Принимающий содержит метод:
@GetMapping("/receive")
public Mono<Void> receive(@RequestParam String message) {
return Mono.fromRunnable(() -> {
receiverService.receiveMessage(message);
});
}
Метод receiverService.receiveMessage(message); реализован следующим образом:
public void receiveMessage(String message) {
var time = LocalDateTime.now();
var gson = new Gson();
var mess = gson.fromJson(message, MessageDto.class);
var rec = MessageLog.builder()
.message(mess.getMessage())
.startTransactionTime(time)
.sendTime(mess.getTime())
.build();
var saved = repositories.save(rec);
saved.setEndTransactionTime(LocalDateTime.now());
repositories.save(saved);
log.debug("Received message: " + message);
}
Отправляющий сервис содержит код:
int i;
do {
i = atomicInteger.get();
var mess = MessageDto.builder().message("Mess ("+name+"): " + i).time(LocalDateTime.now()).build();
var gson = new Gson();
System.out.println(i);
if (i == COUNT - 1) {
dispatcherService.receive(gson.toJson(mess)).subscribe(null, null, () -> atomicInteger.set(COUNT + 1000));
}
else {
dispatcherService.receive(gson.toJson(mess)).subscribe();
}
i = atomicInteger.incrementAndGet();
} while (i < 1000);
do {
Thread.sleep(100);
} while (atomicInteger.get() < COUNT + 1000);
При запуске сервисов отправляющий должен передать принимающему 1000 сообщений. Согласно логу отправителя он делает это успешно. Но принимающая сторона получает только 72 сообщения. При повторных перезапусках количество получаемых сообщений не меняется.