当前位置: 首页 > 知识库问答 >
问题:

如何在每次更改变量时生成事件流?

丁志勇
2023-03-14

我想每次改变整数变量时发送更新

@PutMapping
public void update() {
    integer = random.nextInt();
}

@GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Integer> eventFlux() {
    Flux<Integer> eventFlux = Flux.fromStream(
            Stream.generate(() -> integer)
    );
    return Flux.zip(eventFlux, onUpdate()).map(Tuple2::getT1);
}

private Flux<Long> onUpdate() {
    return Flux.interval(Duration.ofSeconds(1));
}

共有1个答案

夏兴生
2023-03-14

您可以使用一个FLUXPORTER作为:

  • 上游用户;您可以使用它向其中添加数字:
    @PutMapping("/{number}")
    public void update(@PathVariable Integer number) {
        processor.onNext(number);
    }
  • 下游PublisherFlux);哪些客户端可以订阅接收添加的号码:
    @GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<Integer> eventFlux() {
        return processor;
    }

以下是一个完整的工作示例:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.reactive.config.EnableWebFlux;
import org.springframework.web.reactive.config.WebFluxConfigurer;

import reactor.core.publisher.DirectProcessor;
import reactor.core.publisher.Flux;
import reactor.core.publisher.FluxProcessor;

@SpringBootApplication
@EnableWebFlux
@RestController
public class EventStreamApp implements WebFluxConfigurer {

    public static void main(String[] args) {
        SpringApplication.run(EventStreamApp.class);
    }

    private FluxProcessor<Integer, Integer> processor = DirectProcessor.create();

    @PutMapping("/{number}")
    public void update(@PathVariable Integer number) {
        processor.onNext(number);
    }

    @GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<Integer> eventFlux() {
        return processor;
    }
}

GitHub上的完整代码

希望这能有所帮助。

 类似资料:
  • 我的课程注册项目应该有很多方法,比如(添加课程),(添加导师),等等(添加学生())就是其中之一,我想知道每次创建对象时如何更改对象的变量(std)我不知道每个对象如何都有相同的变量 那么,我想把变量改为std1、std2之类的任何建议 我想知道这是不是我做错了什么? 如果每个对象都用相同的变量声明,那么它会将每个创建的对象的数据克隆到新创建的对象? 谢谢你。

  • 问题内容: 在Android应用程序中(或者在没有区别的情况下,在Java中更常见),什么时候变量值发生变化的最佳方法是什么? 问题答案: 您真正想要做的是设置事件驱动模型,以在事件发生时触发侦听器(在您的情况下,说变量值已更改)。这不仅对于Java,而且对于其他编程语言也非常普遍,尤其是在UI编程的情况下(尽管不一定如此) 通常,这可以通过执行以下步骤来完成: 确定在事件触发时侦听器应实现的接口

  • 我有一个“移动”模块,它依赖于一个“核心”模块,我不断收到相同的不一致错误: 移动/构建。格拉德尔: 核心/build.gradle: 每当我将我的变体设置为mobiledebug-core-debug时,我仍然会在我的核心中获得相同的输出。我的申请。java文件:'https://core.release':

  • 我正在开发一个。能让它一变就重启吗?我正在Coffeescript中开发它。是否可以监视以便在保存更改时重新启动?

  • 问题内容: 如何轻松检测变量何时更改值?我希望每当指定变量更改值时,程序的执行就在调试器上中断。现在,我正在使用Eclipse的调试器。 问题答案: 对于类或实例变量 右键单击大纲视图中的变量 选择“切换监视点” 然后,在breapkoints视图中,可以右键单击结果条目 选择“断点属性” 取消选择“现场访问”。

  • 请帮助我订阅更改的变量。我做了简单的微调。服务中的微调状态(真|假)存储: 在组件模板中,我通过条件显示微调器: 在组件中,我尝试订阅服务isVisibleSpinner变量中的更改: 但控制台输出遵循错误消息: 类型“boolean”不可分配给类型“Observable”。