List of usage examples for org.springframework.web.servlet.mvc.method.annotation SseEmitter SseEmitter
public SseEmitter(Long timeout)
From source file:io.github.proxyprint.kitchen.utils.NotificationManager.java
public SseEmitter subscribe(String username) { SseEmitter sseEmitter = new SseEmitter(0l); sseEmitter.onCompletion(new DeleteTask(this, username, sseEmitter)); this.subscriptions.put(username, sseEmitter); return sseEmitter; }
From source file:com.bodybuilding.argos.controller.TurbineStreamController.java
@RequestMapping("/turbine-stream/{cluster}") public ResponseEntity<SseEmitter> streamHystrix(@PathVariable("cluster") String cluster) { Optional<HystrixClusterMonitor> clusterMonitor = clusterRegistry.getCluster(cluster); if (!clusterMonitor.isPresent()) { return new ResponseEntity<>(HttpStatus.NOT_FOUND); }/* ww w . ja v a 2 s. c o m*/ final SseEmitter emitter = new SseEmitter(TimeUnit.DAYS.toMillis(45)); SseEmitterUtil.bindObservable(emitter, clusterMonitor.get().observeJson().takeUntil(shutdown).subscribeOn(Schedulers.io())); return ResponseEntity.ok(emitter); }
From source file:com.bodybuilding.argos.controller.StreamController.java
@RequestMapping("/cluster.stream") public SseEmitter streamMetrics() { final SseEmitter emitter = new SseEmitter(TimeUnit.DAYS.toMillis(45)); SseEmitterUtil.bindObservable(emitter, streamObservable); return emitter; }
From source file:org.springframework.web.servlet.mvc.method.annotation.ReactiveTypeHandler.java
/** * Process the given reactive return value and decide whether to adapt it * to a {@link ResponseBodyEmitter} or a {@link DeferredResult}. * @return an emitter for streaming or {@code null} if handled internally * with a {@link DeferredResult}./* w w w.j a v a2 s. c om*/ */ @Nullable public ResponseBodyEmitter handleValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mav, NativeWebRequest request) throws Exception { Assert.notNull(returnValue, "Expected return value"); ReactiveAdapter adapter = this.reactiveRegistry.getAdapter(returnValue.getClass()); Assert.state(adapter != null, "Unexpected return value: " + returnValue); ResolvableType elementType = ResolvableType.forMethodParameter(returnType).getGeneric(0); Class<?> elementClass = elementType.resolve(Object.class); Collection<MediaType> mediaTypes = getMediaTypes(request); Optional<MediaType> mediaType = mediaTypes.stream().filter(MimeType::isConcrete).findFirst(); if (adapter.isMultiValue()) { if (mediaTypes.stream().anyMatch(MediaType.TEXT_EVENT_STREAM::includes) || ServerSentEvent.class.isAssignableFrom(elementClass)) { SseEmitter emitter = new SseEmitter(STREAMING_TIMEOUT_VALUE); new SseEmitterSubscriber(emitter, this.taskExecutor).connect(adapter, returnValue); return emitter; } if (CharSequence.class.isAssignableFrom(elementClass)) { ResponseBodyEmitter emitter = getEmitter(mediaType.orElse(MediaType.TEXT_PLAIN)); new TextEmitterSubscriber(emitter, this.taskExecutor).connect(adapter, returnValue); return emitter; } if (mediaTypes.stream().anyMatch(MediaType.APPLICATION_STREAM_JSON::includes)) { ResponseBodyEmitter emitter = getEmitter(MediaType.APPLICATION_STREAM_JSON); new JsonEmitterSubscriber(emitter, this.taskExecutor).connect(adapter, returnValue); return emitter; } } // Not streaming... DeferredResult<Object> result = new DeferredResult<>(); new DeferredResultSubscriber(result, adapter, elementType).connect(adapter, returnValue); WebAsyncUtils.getAsyncManager(request).startDeferredResultProcessing(result, mav); return null; }