sseBuilder.id(line.substring(3).trim());
sseBuilder.id(line.substring(3));
@GetMapping("/event") Flux<ServerSentEvent<Person>> sse() { return INTERVAL.take(2).map(l -> ServerSentEvent.builder(new Person("foo " + l)) .id(Long.toString(l)) .comment("bar " + l) .build()); }
sseBuilder.id(line.substring(3));
sseBuilder.id(line.substring(3));
@Bean Consumer<String> distributeEvent(final List<FluxSink<ServerSentEvent<Map>>> subscribers) { return message -> subscribers.forEach(fluxSink -> fluxSink.next(ServerSentEvent.<Map>builder() .id(UUID.randomUUID().toString()) .data(singletonMap("payload", message)) //.data(HashMap.of( // "payload", message, // "at", Instant.now() //).toJavaMap()) .event("message") .build())); } }
@RequestMapping("/sse/event") Flux<ServerSentEvent<String>> sse() { return INTERVAL.map(l -> ServerSentEvent.builder("foo") .id(Long.toString(l)) .comment("bar") .build()); }
@Test public void writeServerSentEventsWithBuilder() throws Exception { ResolvableType type = ResolvableType.forClassWithGenerics(ServerSentEvent.class, String.class); EmitterProcessor<ServerSentEvent<?>> processor = EmitterProcessor.create(); SseEmitter sseEmitter = (SseEmitter) handleValue(processor, Flux.class, type); EmitterHandler emitterHandler = new EmitterHandler(); sseEmitter.initialize(emitterHandler); processor.onNext(ServerSentEvent.builder("foo").id("1").build()); processor.onNext(ServerSentEvent.builder("bar").id("2").build()); processor.onNext(ServerSentEvent.builder("baz").id("3").build()); processor.onComplete(); assertEquals("id:1\ndata:foo\n\nid:2\ndata:bar\n\nid:3\ndata:baz\n\n", emitterHandler.getValuesAsText()); }
@Test public void writeServerSentEvent() { ServerSentEvent<?> event = ServerSentEvent.builder().data("bar").id("c42").event("foo") .comment("bla\nbla bla\nbla bla bla").retry(Duration.ofMillis(123L)).build(); Mono<ServerSentEvent> source = Mono.just(event); testWrite(source, outputMessage, ServerSentEvent.class); StepVerifier.create(outputMessage.getBody()) .consumeNextWith(stringConsumer("id:c42\nevent:foo\nretry:123\n:bla\n:bla bla\n:bla bla bla\ndata:")) .consumeNextWith(stringConsumer("bar\n")) .consumeNextWith(stringConsumer("\n")) .expectComplete() .verify(); }
Mono<ServerResponse> sse(ServerRequest request) { Flux<ServerSentEvent<String>> body = INTERVAL .map(aLong -> ServerSentEvent.builder("foo").id("" + aLong).comment("bar").build()); return ServerResponse.ok().body(fromServerSentEvents(body)); } }