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中选择间隔,我都应该关闭并打开新连接吗?