WebFlux做项目碰到的一些问题
之前一直不明白为什么WebFlux 在SpringCloud Gateway用了这么久怎么没有直接用它写服务和单独的项目 直到我自己踩坑以后…
1 数据库
首先 r2bdc 太不成熟 多表查询根本就不完善 需要闭坑 老老实实用阻塞的方式去请求数据库
2 用户请求参数
WebFlux 的 ServerWebExchange 的 getRequest().getHeaders() 获取到的参数有很多是获取不到的 比如 date
还有些其它隐性规则 比如 x_param1 这样不行 必须 x-param1
还有大小写问题 前端传递 XXX 后端获取到 xxx
等使用 SpringMVC 不会碰到的异常
其实就是完全按http协议来 http协议说header忽略大小写 WebFlux获取到的header就全是小写的
3 WebClient
1 | webClient.method(method).uri(url).headers(httpHeaders -> { |
想把所有的请求头信息全部转发到WebClient 要注意
header 关键字等信息无法转发
我用这个是要实现接口转发 但是 header中的数据 原始接口有个 date参数 WebClient就完全无法转发
只能单独设置为 date: 时间戳
但是用户是上帝 人接口就是不符合http协议规范 传递参数愣是携带的header关键字…
4 报错
我写的项目类似 Apache ShenYu 和 Soul 网关这样的系统
不过我把 管理和集群写成同一个项目
就导致我的项目既有 WebHandle 处理 plugin 又有 DispatcherHandler 处理 MVC
这时我碰到一个问题
前端请求MVC时 参数错误之类的导致 进入 DispatcherHandler 但是 参数对应不上时 会没有任何异常抛出并且没有任何返回
解决方案
1 | return dispatcherHandler.handle(exchange).doOnError(e->{ |