Angular 如何使用UI中的指定值控制流量流间隔
我用以下方式定义了反应终点(示例):Angular 如何使用UI中的指定值控制流量流间隔,angular,reactive-programming,spring-webflux,Angular,Reactive Programming,Spring Webflux,我用以下方式定义了反应终点(示例): @CrossOrigin(origins=“*”) @ApiOperation(value=“Streams AMQ相关监视器数据”) @GetMapping(products=MediaType.TEXT\u事件\u流\u值) 公共流量流客户数据(){ 返回monitorService.createFluxForInterval(“客户”, gridService::fetchAllCustomers); } 公共流量createFluxForInterv
@CrossOrigin(origins=“*”)
@ApiOperation(value=“Streams AMQ相关监视器数据”)
@GetMapping(products=MediaType.TEXT\u事件\u流\u值)
公共流量流客户数据(){
返回monitorService.createFluxForInterval(“客户”,
gridService::fetchAllCustomers);
}
公共流量createFluxForInterval(ProcessName ProcessName,
供应商方法){
返回通量间隔(持续时间零点,持续时间秒(间隔时间))
.map(serverSentEvent->serverSentEvent.builder(method.get()).event(processName.description()).build());
}
我已经在yml中配置了intervalPeriod,但我想使用下拉菜单从UI控制它。谁能推荐一下吗
角度代码是这样的
new Observable<any[]>(
obs => {
let eventSource = new EventSource("/customers");
eventSource.addEventListener("customers", function (e: MessageEvent) {
obs.next(JSON.parse(e.data));
});
});
新的可观察到的(
obs=>{
设eventSource=neweventsource(“/customers”);
eventSource.addEventListener(“客户”,函数(e:MessageEvent){
下一步(JSON.parse(e.data));
});
});
从您共享的代码来看,您的间隔期
似乎是当前在初始化Spring ApplicationContext时从应用程序yaml加载的属性
现在,由于您需要用户/管理员从UI提供间隔时间,它需要作为此API或其他API的路径参数或查询参数传递(如果您想在其他地方重复使用此间隔时间,只需将该信息存储在内存/cache/DB中即可)。
@CrossOrigin(origins = "*")
@ApiOperation(value = "Streams AMQ related monitor data.")
@GetMapping(path= "/customers", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent> streamCustomerData(@RequestParam("intervalPeriod") long intervalPeriod) {
return monitorService.createFluxForInterval("customers",intervalPeriod,
gridService::fetchAllCustomers);
}
public Flux<ServerSentEvent> createFluxForInterval(ProcessName processName, long intervalPeriod,
Supplier method) {
return Flux.interval(Duration.ZERO, Duration.ofSeconds(intervalPeriod))
.map(serverSentEvent -> ServerSentEvent.builder(method.get()).event(processName.description()).build());
}
@CrossOrigin(origins=“*”)
@ApiOperation(value=“Streams AMQ相关监视器数据”)
@GetMapping(path=“/customers”,products=MediaType.TEXT\u EVENT\u STREAM\u VALUE)
公共流量streamCustomerData(@RequestParam(“intervalPeriod”)长时间间隔){
return monitorService.createFluxForInterval(“客户”),intervalPeriod,
gridService::fetchAllCustomers);
}
公共流量createFluxForInterval(ProcessName ProcessName,长间隔,
供应商方法){
返回通量间隔(持续时间零点,持续时间秒(间隔时间))
.map(serverSentEvent->serverSentEvent.builder(method.get()).event(processName.description()).build());
}
从您共享的代码来看,您的间隔期
似乎是当前在初始化Spring ApplicationContext时从应用程序yaml加载的属性
现在,由于您需要用户/管理员从UI提供间隔时间,它需要作为此API或其他API的路径参数或查询参数传递(如果您想在其他地方重复使用此间隔时间,只需将该信息存储在内存/cache/DB中即可)。
@CrossOrigin(origins = "*")
@ApiOperation(value = "Streams AMQ related monitor data.")
@GetMapping(path= "/customers", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent> streamCustomerData(@RequestParam("intervalPeriod") long intervalPeriod) {
return monitorService.createFluxForInterval("customers",intervalPeriod,
gridService::fetchAllCustomers);
}
public Flux<ServerSentEvent> createFluxForInterval(ProcessName processName, long intervalPeriod,
Supplier method) {
return Flux.interval(Duration.ZERO, Duration.ofSeconds(intervalPeriod))
.map(serverSentEvent -> ServerSentEvent.builder(method.get()).event(processName.description()).build());
}
@CrossOrigin(origins=“*”)
@ApiOperation(value=“Streams AMQ相关监视器数据”)
@GetMapping(path=“/customers”,products=MediaType.TEXT\u EVENT\u STREAM\u VALUE)
公共流量streamCustomerData(@RequestParam(“intervalPeriod”)长时间间隔){
return monitorService.createFluxForInterval(“客户”),intervalPeriod,
gridService::fetchAllCustomers);
}
公共流量createFluxForInterval(ProcessName ProcessName,长间隔,
供应商方法){
返回通量间隔(持续时间零点,持续时间秒(间隔时间))
.map(serverSentEvent->serverSentEvent.builder(method.get()).event(processName.description()).build());
}
我已将intervalPeriod作为路径参数传递,还关闭了现有连接(eventSource.close()),并在intervalPeriod发生更改时打开一个新连接,因为浏览器最多可以有6个连接。我已将intervalPeriod作为路径参数传递,还关闭了现有连接(eventSource.close())并在间隔时间发生变化时打开一个新的连接,因为浏览器最多可以有6个连接。谢谢。Path Param可以工作,但angular代码如何,早期SSE连接会发生什么情况?无论何时选择具有不同间隔的值,这都是一个新连接吗?因此,无论何时从UI中选择间隔,我都应该关闭并打开新连接吗?谢谢。Path Param可以工作,但angular代码如何,早期SSE连接会发生什么情况?无论何时选择具有不同间隔的值,这都是一个新连接吗?那么,无论何时从UI中选择间隔,我都应该关闭并打开新连接吗?