Как создать Flux из http-запросов - PullRequest
0 голосов
/ 03 июня 2019

Я бы хотел создать Flux из нескольких входящих http-запросов к методу rest-mvc rest или методу spring-webflux.
Т.е. при любом новом вызове метода его тело будет добавлено в поток. Запрос может исходить от любого клиента, но не обязательно от WebClient.

1 Ответ

1 голос
/ 05 июня 2019

Вы можете достичь этого с помощью Flux.create метода

@RestController
@RequestMapping("/")
public class EchoController
{
    private final Consumer<String> requestConsumer; // consumer to send signal to the flux

    public EchoController()
    {
        List<Consumer<String>> requestConsumerHolder = new ArrayList<>(); // temporary holder

        Flux<String> stringFlux = Flux.create(fluxSink ->
            requestConsumerHolder.add(fluxSink::next)); // when consumer accepts string it calls FluxSink.next

        stringFlux
            .doOnNext(System.out::println) // print string on next
            .subscribe();

        requestConsumer = requestConsumerHolder.get(0);
    }

    @PostMapping("/echo")
    public Mono<String> echo(@RequestBody Mono<String> request)
    {
        return request.doOnNext(requestConsumer); // send string to the flux on next
    }
}
...