@
hantsy #10 响应式编程,没问题,但是必须和传统模式混合,比如 java stream 就非常好。但是 webflux 和 netty 接合之后,就强制要求全流程上 stream,复杂的逻辑下,代码复杂度上升不知道几个级别。
响应式编程想把所有的输入输出都流水线化,后面的流程的输入是上一个流程的输出,想法是很好的,但是现实不总是这样。
举个例子,
我现在需要在 A 库查一个 List A,然后遍历 List A,在 X 库逐个查询,填充每个对象。同时,我在 B 库再查一个 List B。同时,我再在网络(另一个微服务)查一个 List C。然后把这些数据发送到一个数据库 D。
请问你用 webflux 能优雅的写出来吗?要套多少个 zip ?如果我查 X 库有些会出错,有些不会,要 fallback,怎么加?插入 D 数据库异常了,怎么准确地 fallback 到一个 checkpoint,怎么做事务回滚?如果在 A、B、X、D 任意一步出错,我想重试流程,应该在哪里加 retry ?要加多少个 retry ?如果我想 debug,我怎么知道我执行到哪行代码?调用的堆栈是怎么样的?最后,你写出来的这种带着无数嵌套,zip 的代码,你的同事看得懂吗?
如果用 vert.x 异步,上面的流程可以无歧义的用多个回调来表示出来,至少还看得懂,只不过是更加难看。