Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强
总时长 104:45:00 共408P
此文章包含第267p-第p270的内容
远程调用
订单服务调用客户服务的查询收货地址信息方法
1.在订单服务里添加@EnableFeignClients 来开启远程调用功能
2.新建一个类 来专门调用远程服务客户端(调用客户服务) 使用@FeignClient注解,这里只用了name参数,url在服务发现中心(nacos)注册了
3.在客户服务里写一个查询客户收货地址的方法
它调用的service
-
放到订单服务的远程调用service里
修改为自己定义的VO
-
订单模块的需要查看客户收货地址的方法的类里引用远程调用service
-
在方法中引用那个方法
-
然后Feign将会在服务发现中心(这里用的是nacos,也可以使用Eureka)中查找名为gulimall-member的服务,并根据服务的地址进行调用。
调用其他服务
这里的流式写法 重构了map里price的数据(这里多次调用数据库 性能太低,不推荐使用,但是这个流式写法推荐学习)
这里自己写getTotal方法 这里的total也可以删除 因为有get方法了
payPrice同上
防止用户重复提交的令牌
查看和禁用断点信息
feign 远程调用
分析远程调用的源码
这里判断是不是它自带的方法,不是才去调用远程服务
添加feign远程调用的请求拦截器
创建Feign配置类
请求的上下文环境保持器
ps:新版本的feign好像自动会把请求头带上了 所以等出问题时再进行配置
这个远程调用接口不是面向用户的接口,不需要放网关
使用线程池异步调用(优化)
如果是内网服务之间调用我觉得不用登录会话,
异步丢失请求头的问题
解决方法 在每个线程里放一下request的head信息
这里很麻烦,不过没关系,现在很少用SpringSession了,都是存redis
返回的时候未写@ResponseBody导致bug