Java ProjectReactor-将两个发布者有状态地结合起来并发出结果

Java ProjectReactor-将两个发布者有状态地结合起来并发出结果,java,kotlin,reactive-programming,project-reactor,Java,Kotlin,Reactive Programming,Project Reactor,我想设计一个带有反应器的处理管道,如下所示 我有两个输入出版商,一个是冷的,一个是热的。我想将hotBroadcasts发出的项聚合到可变的内存数据结构中(比如HashMap),对于orderEntries中的每个项,我想从该映射中选择相应的元素,创建结果项并推送到下游订阅服务器 来自hotBroadcasts的事件以任意顺序出现,这就是为什么我想将它们存储在内存中以便检索 从概念上讲,它应该是这样工作的: orderEntries hot

我想设计一个带有反应器的处理管道,如下所示

我有两个输入出版商,一个是冷的,一个是热的。我想将hotBroadcasts发出的项聚合到可变的内存数据结构中(比如HashMap),对于orderEntries中的每个项,我想从该映射中选择相应的元素,创建结果项并推送到下游订阅服务器

来自hotBroadcasts的事件以任意顺序出现,这就是为什么我想将它们存储在内存中以便检索

从概念上讲,它应该是这样工作的:

       orderEntries                      hotBroadcasts
           |                                   | 
           |                                   | 
           |                                   | 
           \                                   / 
            ----------------> <----------------
                   (aggregate events from hotBroadcasts)     
                             |
                             |
                        resulting item
                             |
                             |
                            \/
                      downstream subcriber  
这里的问题是,对hotBroadcast的过滤会略过orderEntries中每个项目的所有项目。因此,我想到将它们存储在HashMap中


有人能告诉我正确的方向吗?

可以聚合来自两个不同发布者的消息的对象是一个带有2个参数的异步过程调用。这种调用可以在rxjava中使用io.reactivex.Single.zipSingleSource arg1、SingleSource arg2、BiFunction func构造,也可以在纯Java中使用Java.util.concurrent.CompletableFuture.thenCombineCompletionStage arg2、BiFunction func构造

您需要一个特殊的HashMap来保存异步过程调用。当首次使用给定标签访问此HashMap时,应自动创建调用

因此,一位公众援引了她的话

asyncProc=callMap.get(label); // asyncProc is created and stored with the label as a key
asyncProc.arg1.complete(value);
asyncProc=callMap.get(label); // previously created instance returned
asyncProc.arg2.complete(value);
而另一个Publicher调用

asyncProc=callMap.get(label); // asyncProc is created and stored with the label as a key
asyncProc.arg1.complete(value);
asyncProc=callMap.get(label); // previously created instance returned
asyncProc.arg2.complete(value);

在两个发布者都提供了参数之后,异步过程将被执行。

您如何知道何时聚合了所有内容?或者,在收到有关冷通量的消息之前,您是否会进行聚合?不管怎样,看来你想要的是花点时间?我不知道。我只是想用一个时间窗口。为什么不用窗口和组合测试呢?您的解决方案对于所述的需求来说过于复杂,那么是什么使您的案例变得特别呢?您可以发布一个代码示例吗?我不认为我的情况是特殊的,我实际上认为这一定是一个相当普遍的问题,但我真的不能完全相信这一点。真的,困扰我的是hotBroadcasts的低效率。过滤器…,就是这样。orderEntry如何匹配hotBroadcast?按照他们创作的顺序,或者他们都有一些必须匹配的标签?