弹簧反应堆项目的反应流背压

时间:2016-05-23 15:19:15

标签: spring project-reactor

我研究和阅读文件并不是很容易理解。 我想要实现的是以下功能:

我正在使用Spring Reactor项目并使用eventBus。我的事件总线向模块A投掷事件。

模块A应该接收事件并插入到将保存唯一值的热流中。每250个Milisecons流应该提取所有价值并对它们进行计算......等等。

例如: eventBus抛出的事件编号为:1,2,3,2,3,2

Stream应该获取并保持唯一值 - > 1,2,3 在250毫秒之后,流应该打印数字和空值

任何人都知道如何开始?我尝试了这些例子,但没有什么真正起作用,我想我不明白。有人有例子吗?

TNX

编辑:

当试图做下一个时,我总是得到例外:

        Stream<List<Integer>> s = Streams.wrap(p).buffer(1, TimeUnit.SECONDS);

        s.consume(i -> System.out.println(Thread.currentThread() + " data=" + i));

        for (int i = 0; i < 10000; i++) {
            p.onNext(i);
        }

例外:

java.lang.IllegalStateException: The environment has not been initialized yet
    at reactor.Environment.get(Environment.java:156) ~[reactor-core-2.0.7.RELEASE.jar:?]
    at reactor.Environment.timer(Environment.java:184) ~[reactor-core-2.0.7.RELEASE.jar:?]
    at reactor.rx.Stream.getTimer(Stream.java:3052) ~[reactor-stream-2.0.7.RELEASE.jar:?]
    at reactor.rx.Stream.buffer(Stream.java:2246) ~[reactor-stream-2.0.7.RELEASE.jar:?]
    at com.ta.ng.server.controllers.user.UserController.getUsersByOrgId(UserController.java:70) ~[classes/:?]

正如您所看到的,如果不通过此问题,我就无法继续尝试。

顺便说一下:只有当我使用buffer(1, TimeUnit.SECONDS)时,才会发生这种情况。例如,如果我使用buffer(50),它就会起作用。虽然这不是最终的解决方案但它的开始。

1 个答案:

答案 0 :(得分:0)

再次阅读doc后我错过了这个:

static {
        Environment.initialize();
    }

这解决了这个问题。 TNX