java - 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)是否有更好的解决方案?
解决方案
推荐阅读
- r - 制作一个 4d 数组,其中每个点对应于函数的结果
- c# - 我可以长期固定静态值类型字段吗?
- python - Scipy curve_fit 给出错误答案
- css - CSS对齐框彼此相邻
- java - 未找到给定包括的测试:[***Test](filter.includeTestsMatching)
- php - Codeigniter错误:fsockopen():php_network_getaddresses:getaddrinfo失败:名称或服务未知
- sql - 根据另一个表中的列值选择一个表中的行?
- php - 开发 Directus 扩展时如何设置单元测试?
- python - 如何使用 python 更改用户的 shell 当前目录?(ubuntu/linux)
- python - Python Pandas 基于 case 语句分组