Java 处理来自发布服务器的并行拖放数据

Java 处理来自发布服务器的并行拖放数据,java,rx-java,project-reactor,reactive-streams,Java,Rx Java,Project Reactor,Reactive Streams,如何处理从发行商并行订阅的数据 我是否应该在员工池中循环订阅?当我在projectreactor中调用subscribe时,我只得到了一块数据。如何“耗尽所有” 如何确保每个工作人员接收不同的数据块 将每个数据块转换为任务,并将其提交给执行器。转换器可能如下所示: class Converter implements Subscriber<T> { final Executor executor; Subscription subscription; Con

如何处理从
发行商
并行订阅的数据

  • 我是否应该在员工池中循环订阅?当我在
    projectreactor
    中调用subscribe时,我只得到了一块数据。如何“耗尽所有”
  • 如何确保每个工作人员接收不同的数据块

  • 将每个数据块转换为任务,并将其提交给
    执行器
    。转换器可能如下所示:

    class Converter implements Subscriber<T> {
        final Executor executor;
        Subscription subscription;
    
        Converter(Executor executor) {
            this.executor = executor;
        }
    
        @Override
        public void onSubscribe(Subscription s) {
            subscription = s;
            s.request(1);
        }
    
        @Override
        public void onNext(T data) {
            executor.execute(()->process(data));
            subscription.request(1);
        }
        ...        
        void process(T o) {
            ...
        }
    }
    
    类转换器实现订阅服务器{
    最终执行人;
    认购;
    转换器(执行器执行器){
    this.executor=执行人;
    }
    @凌驾
    认购的公共无效(认购){
    订阅=s;
    s、 请求(1);
    }
    @凌驾
    公共void onNext(T数据){
    executor.execute(()->进程(数据));
    认购请求书(1);
    }
    ...        
    无效过程(TO){
    ...
    }
    }
    
    在Project Reactor中,使用
    parallel()
    操作符:

    Flux.from(thePublisher) //if we don't assume publisher is already a Flux
        .parallel() //instruct the Flux to divide work on "rails",
        //but so far these rails are running on the same thread !
        .runOn(Schedulers.parallel()) //now each rail runs on its own thread
        .map(...).etc(...)
        .sequential() //merge the rails back to a single sequence
        //subscribe, or continue processing sequentially
    
    RxJava 2非常相似,具有相同的
    并行
    运算符。

    请阅读以下内容: