我有一个用例,我调用四个独立的下游端点,它们都可以并行调用。每次调用完成后,我从lambda函数返回一个容器对象,其唯一目的是包含来自下游调用的原始响应。从那里,容器对象将被转换为消费者所需的模型。
代码的结构大致如下:Observable.zip(o1, o2, o3, o4,
(resp1, resp2, resp3, resp4)
-> new RawResponseContainer(resp1, resp2, resp3, resp4)
).toBlocking().first();
有更好的方法吗?我100%需要每一个观察到的完成;否则,消费者模式的转型将是不完整的。虽然我认为我可以"在飞行中"转换来自每个可观察对象的每个响应,而不是等待立即转换每个响应,但我仍然需要在转换完成之前完成每个调用。
我读到在使用rx时使用toBlocking()是一个不好的做法(除了"遗留"应用程序),所以任何帮助都很感激。
这不是回复,是注释:
你问的,本质上是一个顺序处理还是并行处理的问题。您所做的是顺序处理(通过阻塞),建议是并行处理。虽然哪一个比另一个好,但在上下文中是完整的。在您的情况下,您需要所有的响应,甚至在并行模型中都必须成功完成。即使有一个失败了,整个过程都是徒劳的。同时,每个处理都会发生,如果一个失败,所有3个都会被浪费掉。在顺序中,它会在中间产生错误。如果您可以忍受顺序处理带来的延迟,那就继续使用它。顺序处理(通常)是较不复杂的实现。