Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
rxjava2检测未使用的元素_Java_Rx Java2 - Fatal编程技术网

rxjava2检测未使用的元素

rxjava2检测未使用的元素,java,rx-java2,Java,Rx Java2,我是RxJava新手,希望这是有意义的 我正在用RxJava改造一个旧的排队系统。其结构是我们有一个数据库表,其中有一堆作业要运行 我想发生的事: 向db查询新工作 将传入作业筛选/平面映射到关注这些作业类型的处理器 以任何适当的方式处理这些工作 注销错误和未处理的作业 这是我到目前为止所拥有的 Flowable<Job> jobQueue = Flowable.interval(500, TimeUnit.MILLISECONDS, Schedulers.io())

我是RxJava新手,希望这是有意义的

我正在用RxJava改造一个旧的排队系统。其结构是我们有一个数据库表,其中有一堆作业要运行

我想发生的事:

  • 向db查询新工作
  • 将传入作业筛选/平面映射到关注这些作业类型的处理器
  • 以任何适当的方式处理这些工作
  • 注销错误和未处理的作业
这是我到目前为止所拥有的

    Flowable<Job> jobQueue = Flowable.interval(500, TimeUnit.MILLISECONDS, Schedulers.io())
            .onBackpressureDrop()
            .flatMapIterable((l)->dao.getNextSetOfJobs(100), 1000)
            .retry(5);

    jobQueue.flatMap((t) ->
    {
        if ("myJob".equals(t.getJobType()))
        {
            return Flowable.just("rightJob");
        }
        else
            return Flowable.empty();
    }).subscribe((v)->System.out.println(v));

    jobQueue.flatMap((t) ->
    {
        if ("myOtherJob".equals(t.getJobType()))
        {
            return Flowable.just("rightJob");
        }
        else
            return Flowable.empty();
    }).subscribe((v)->System.out.println(v));
Flowable jobQueue=Flowable.interval(500,TimeUnit.ms,Schedulers.io())
.onBackpressureDrop()
.flatMapIterable((l)->dao.getNextSetTofJobs(100),1000)
.重试(5);
jobQueue.flatMap((t)->
{
如果(“myJob”.equals(t.getJobType()))
{
返回可流动的.just(“rightJob”);
}
其他的
返回Flowable.empty();
}).subscribe((v)->System.out.println(v));
jobQueue.flatMap((t)->
{
if(“myOtherJob”.equals(t.getJobType()))
{
返回可流动的.just(“rightJob”);
}
其他的
返回Flowable.empty();
}).subscribe((v)->System.out.println(v));
所以我的问题

  • 如何抓住
    JobType
    未在下游处理的情况
  • 这是订阅的正确方式吗?也就是说,过滤/平面映射出我关心的作业,然后将它们下推到执行“正确”操作的处理器中
  • 我应该重播和过滤吗
  • 我是否应该阅读或申请其他模式或书籍

如果您对如何做到这一点有任何建议,我们将不胜感激。

您所说的“工作类型不在下游处理的情况”是什么意思?这是不是因为你的过滤不是在同一个地方/班级进行的?我有一种直觉,你可以使用rx
groupBy
JobType
组织,但这取决于实现。我认为你可以这样做:
jobQueue.groupBy(Job::getJobType)。subscribe(分组->/*过程根据组键*/)
这是我最初的想法,但我肯定可以重新考虑它(分组可能是我真正想要的)。主要的问题是有20种不同的工作类型在做完全不同的事情。因此分组方法可能看起来有点毛茸茸的。尽管如此,我还是可以将其归纳为一些好的方法。我认为基于
过滤器的方法有一个错误,那就是它需要多次调用
订阅
,而您应该只有一个。您所说的“作业类型不在下游处理的情况”是什么意思?这是因为您的筛选不是从同一个位置/类别进行的吗?我有一种直觉,您可以使用rx
groupBy
JobType
进行组织,但这取决于实现。我认为您可以执行以下操作:
jobQueue.groupBy(Job::getJobType).订阅(分组->/*根据组键处理*)
这是我最初的想法,但我肯定可以重新考虑(分组可能是我真正想要的)。主要的问题是有20种不同的工作类型在做完全不同的事情。因此分组方法可能看起来有点毛茸茸的。尽管如此,我还是可以将其归纳为一些好的方法。我认为基于
过滤器的方法有一个错误,那就是它需要多次调用
订阅
,而您应该只有一个。