带有 Sseemitter 406 错误的 JHIPSTER 微服务



我用网关uaa和微服务生成了jhipster应用程序。现在要运行 sse,我添加了以下控制器

@RestController
@RequestMapping("/api")
public class AvgResultNftController {
private final CopyOnWriteArrayList<SseEmitter> emitters = new CopyOnWriteArrayList<>();
@GetMapping(path = "/avgResultNft")
public SseEmitter getAvgResultNft() {
SseEmitter emitter = new SseEmitter();
this.emitters.add(emitter);
emitter.onCompletion(() -> this.emitters.remove(emitter));
emitter.onTimeout(() -> {
emitter.complete();
this.emitters.remove(emitter);
});
return emitter;
}

@SuppressWarnings("unlikely-arg-type")
@EventListener
public void onAvgResultNft(AvgResultNft avgResultNft) {
List<SseEmitter> deadEmitters = new ArrayList<>();
this.emitters.forEach(emitter -> {
try {
emitter.send(avgResultNft);
} catch (Exception e) {
deadEmitters.add(emitter);
}
});
this.emitters.remove(deadEmitters);
}
}

我正在发布AvgResultNft关于某个事件。

我生成了角度应用程序并调用控制器,例如

let source = new EventSource('http://192.168.1.5:8080/proxta/api/avgResultNft', {withCredentials: true })
source.addEventListener('message', message => {
console.log(message)
});

我在调用事件源时收到 406 不可接受的错误。请帮忙。

我认为它对你有帮助 添加headers = "Accept=*/*"produces = MediaType.APPLICATION_OCTET_STREAM_VALUEMediaType.APPLICATION_STREAM_JSON_VALUE

@GetMapping(value = "/avgResultNft", headers = "Accept=*/*",
produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
public SseEmitter getAvgResultNft() {
SseEmitter emitter = new SseEmitter();
this.emitters.add(emitter);
emitter.onCompletion(() -> this.emitters.remove(emitter));
emitter.onTimeout(() -> {
emitter.complete();
this.emitters.remove(emitter);
});
return emitter;
}

但要小心,zuul 1.х 不支持 sse

如何使服务器发送事件 (SSE( 通过 Zuul 代理 spring-boot 2.1.1 工作

最新更新