首页 > 解决方案 > reactor+sse 具有无穷无尽的流,从 Spring Boot2 中的异步消息接收

问题描述

这是场景。a)平板电脑使用http GET获取一些资源,资源是通过异步消息从另一个系统获取的。演示代码如下

在控制器中

@GetMapping
public List<User> listUser() {
    return service.listUser();
}

服务中

public List<User> listUser() {
    requestfromAnotherSystem();
    while(!newDataReady) {};
    newDataReady = false;
    return list;
}

public void onMessage(List<User> list) {
    this.list = list;
    newDataReady = true;
}

b) 其他系统可能会不时修改内容,修改需要及时通知平板;

一开始我使用 RabbitMq 来通知平板电脑在 Service::OnMessage 中的新变化,然后我听到了 Reactor+SSE。因此我将代码更改为

在控制器中

@GetMapping 
public Flux<List<User>> listUser() {
    return service.listUser();
}

服务中

public Flux<List<User>> listUser() {
    Flux<List<User>> flux = Flux.generate(
            () -> 0,
            (state, sink) -> {
                while(!newData){};
                sink.next(users);
                newData = false;
                return state + 1;
            });
    return flux;

我的问题是a)这是否是处理这种情况的正确方法,b)是否有更好的解决方案?

标签: javaspring-bootspring-webflux

解决方案


推荐阅读