Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rx java rxjava中的重试缓冲区_Rx Java_Rx Java2_Buffering - Fatal编程技术网

Rx java rxjava中的重试缓冲区

Rx java rxjava中的重试缓冲区,rx-java,rx-java2,buffering,Rx Java,Rx Java2,Buffering,一个热的可观测物体发射出物体。我想将这些项目上载到服务器。 有两个考虑因素: 由于io操作的费用,我想批处理这些项目并作为数组上载 由于io操作的不可靠性,我希望将失败的批上载预先添加到下一批 我可以使用buffer操作符处理第一个问题,但不知道如何满足第二个要求 我的想法是将故障存储在队列中 公共类堆栈溢出{ 公共静态void main(字符串[]args){ //存储可能发生的任何故障 LinkedBlockingQueue失败=新建LinkedBlockingQueue(); 图普洛德()

一个热的可观测物体发射出物体。我想将这些项目上载到服务器。 有两个考虑因素:

  • 由于io操作的费用,我想批处理这些项目并作为数组上载
  • 由于io操作的不可靠性,我希望将失败的批上载预先添加到下一批

  • 我可以使用
    buffer
    操作符处理第一个问题,但不知道如何满足第二个要求

    我的想法是将故障存储在队列中

    公共类堆栈溢出{
    公共静态void main(字符串[]args){
    //存储可能发生的任何故障
    LinkedBlockingQueue失败=新建LinkedBlockingQueue();
    图普洛德()
    //你想怎么缓冲就怎么缓冲
    .缓冲区(5)
    //这是有趣的部分
    .flatMap(字符串->{
    //添加任何以前的故障
    List prevFailures=新建ArrayList();
    失败。拖入(失败前);
    strings.addAll(prevFailures);
    返回可流动。仅(字符串);
    })
    .flatMapCompletable(字符串->{
    //上传数据
    返回上载(字符串).doOnError(可丢弃->{
    //如果上传失败:
    failures.addAll(字符串);
    });
    }).subscribe();
    }
    //不管你的源头是什么
    专用静态可流动toUpload(){
    返回Flowable.fromIterable(数组.asList(“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”);
    }
    //一些上传操作
    私有静态可完成上传(列表字符串){
    返回Completable.complete();
    }
    }
    

    这里的一些边缘情况表明,如果最后一个可流动缓冲组失败,则不会重试这些操作。这可以通过
    retryWhen
    操作符来实现,但基本思想与使用队列的基本思想相同

    这可能会起作用,但我不会接受它作为答案,因为它违反了很多关于观察值和合成的理解。你说的违反是什么意思?如果你在寻找唯一的答案,我想不出答案
    Uploads succeed:
    1 - 2 - 3 - 4 - 5
    ------------------
    u(1,2,3) - u(4,5)
    
    First upload fails:
    1 - 2 - 3 - 4 - 5
    ------------------
    u(1,2,3) - u(1,2,3,4,5)