如何从 http 请求创建 Flux
How to create Flux from http requests
我想从多个传入的 http 请求到 spring-mvc rest 方法或 spring-webflux 方法创建一个 Flux。
即,任何新的方法调用,其主体将被添加到 Flux 中。
请求可以来自任何客户端,不一定是 WebClient。
你可以用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
}
}
我想从多个传入的 http 请求到 spring-mvc rest 方法或 spring-webflux 方法创建一个 Flux。
即,任何新的方法调用,其主体将被添加到 Flux 中。
请求可以来自任何客户端,不一定是 WebClient。
你可以用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
}
}