Вручную отправлять события в Spring WebFlux из одного сервиса в другой - PullRequest
0 голосов
/ 27 марта 2020

Я хочу создать микросервис Spring, который получает HTTP-запросы с определенными данными (скажем, User) и уведомляет другой микросервис о любых изменениях в указанных данных.

Я видел учебные пособия по Spring Mono и Flux где определена конечная точка, возвращающая объект Mono / Flux, но обычно они делают что-то вроде этого (источник: https://dzone.com/articles/event-streaming-using-spring-webflux):

@GetMapping(value = "/temperatures", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Integer> getTemperature() {
    Random r = new Random();
    int low = 0;
    int high = 50;
    return Flux.fromStream(Stream.generate(() -> r.nextInt(high - low) + low)
        .map(s -> String.valueOf(s))
        .map(s -> Integer.valueOf(s))
        .delayElements(Duration.ofSeconds(1));
}

Я бы хотел чтобы иметь возможность выставить конечную точку, на которую может подписаться другая служба, и вручную вызвать метод для отправки события. Например, если у меня есть конечная точка «Добавить пользователя»:

@PostMapping
public ResponseEntity<User> addUser(@RequestBody @Valid User user) {
  ...
  notifyOtherServices(user);
  ...
}

И notifyOtherServices(User user) должен выдать объект Mono с данными пользователя, чтобы уведомить другие службы об изменении пользователя.

Я сделал нечто подобное с брокером сообщений, таким как RabbitMQ или Kafka, но я не хочу развертывать отдельное приложение.

...