@RequestMapping("/whatever") public SseEmitter index( SseEmitter emitter = new SseEmitter(); Publisher<String> responsePublisher = someResponseGenerator.getPublisher(); Observable<String> responseObservable = RxReactiveStreams.toObservable(responsePublisher); responseObservable.subscribe( str -> { try { emitter.send(str); } catch (IOException ex) { emitter.completeWithError(ex); } }, error -> { emitter.completeWithError(error); }, emitter::complete ); return emitter; };
@Scheduled(fixedRate = 1000) void timerHandler() { try { emitter.send(new Message(new Date().toString()), MediaType.APPLICATION_JSON); } catch (Exception e) { emitter.completeWithError(e); } } }
@KafkaListener(topics = "opencodez", group = "grp-opencodez") public void listen(String message) { System.out.println("Received Messasge: " + message); SseEmitter latestEm = messageController.getLatestEmitter(); try { latestEm.send(message); } catch (IOException e) { latestEm.completeWithError(e); } } }
@RequestMapping(value = BASE_PATH + "/getAccountBalances", method = RequestMethod.GET) public SseEmitter getAccountBalances(@QueryParam("accountId") Integer[] accountIds) { final SseEmitter emitter = new SseEmitter(); new Thread(new Runnable() { @Override public void run() { try { for (int xx = 0; xx < ids.length; xx++) { Thread.sleep(2000L + rand.nextInt(2000)); BalanceDetails balance = new BalanceDetails(); ... emitter.send(emitter.event().name("accountBalance").id(String.valueOf(accountIds[xx])) .data(balance, MediaType.APPLICATION_JSON)); } emitter.send(SseEmitter.event().name("complete").data("complete")); emitter.complete(); } catch (Exception ee) { ee.printStackTrace(); emitter.completeWithError(ee); } } }).start(); return emitter; }