private CircuitBreakerEventEmitter(Flux<CircuitBreakerEventDTO> eventStream) { this.sseEmitter = new SseEmitter(); this.sseEmitter.onCompletion(this::unsubscribe); this.sseEmitter.onTimeout(this::unsubscribe); this.disposable = eventStream.subscribe(this::notify, this.sseEmitter::completeWithError, this.sseEmitter::complete); }
public RateLimiterEventsEmitter(Flux<RateLimiterEventDTO> eventStream) { this.sseEmitter = new SseEmitter(); this.sseEmitter.onCompletion(this::unsubscribe); this.sseEmitter.onTimeout(this::unsubscribe); this.disposable = eventStream.subscribe(this::notify, this.sseEmitter::completeWithError, this.sseEmitter::complete); }
@RequestMapping(path = "/stream", method = RequestMethod.GET) public SseEmitter stream() throws IOException { SseEmitter emitter = new SseEmitter(); emitters.add(emitter); emitter.onCompletion(() -> emitters.remove(emitter)); return emitter; }
@RequestMapping(produces = "text/event-stream") public SseEmitter getJournalEvents() { final SseEmitter emitter = new SseEmitter(); emitter.onCompletion(new Runnable() { @Override public void run() { emitters.remove(emitter); } }); emitters.add(emitter); return emitter; }
@RequestMapping(value = "/temperature-stream", method = RequestMethod.GET) public SseEmitter events(HttpServletRequest request) { log.info("SSE stream opened for client: " + request.getRemoteAddr()); SseEmitter emitter = new SseEmitter(SSE_SESSION_TIMEOUT); clients.add(emitter); // Remove SseEmitter from active clients on error or client disconnect emitter.onTimeout(() -> clients.remove(emitter)); emitter.onCompletion(() -> clients.remove(emitter)); return emitter; }
private SseEmitter emit(Route route, Message<Collection<Object>> message) throws IOException { SseEmitter emitter = new SseEmitter(Long.MAX_VALUE); String path = route.getPath(); if (!emitters.containsKey(path)) { emitters.putIfAbsent(path, new HashSet<>()); } emitters.get(path).add(emitter); emitter.onCompletion(() -> emitters.get(path).remove(emitter)); emitter.onTimeout(() -> emitters.get(path).remove(emitter)); for (Object body : message.getPayload()) { emitter.send(body); } return emitter; }
@GetMapping("/kafka-messages") public SseEmitter getKafkaMessages() { SseEmitter emitter = new SseEmitter( 1 * 60 * 1000L ); emitters.add(emitter); emitter.onCompletion(new Runnable() { @Override public void run() { emitters.remove(emitter); } }); emitter.onTimeout(new Runnable() { @Override public void run() { emitters.remove(emitter); } }); return emitter; }