1.Feign-Api模块
1.1 client包(以itemservice为例)
注意点
FeignConfig 拦截器的配置类
- MyFeignInterceptor
- 当微服务之间调用时,也会被上述拦截器拦截,而Feign的调用没有经过网关,所以不会有authorization=2这个头信息。因此,我们需要给所有由Feign发起的请求都添加请求头。
1.3 Dto包(不要有任何mybatis-plus注解)
1.4 总结
- 由于Feign-api是远程调用服务,只需要配置好就行,所以不要mybatis-plus的依赖
-
2. Gateway模块
2.1 application.yml
注意点
server:
port: 10010 # 网关端口
spring:
application:
name: gateway # 服务名称
cloud:
nacos:
server-addr: 192.168.200.129:8848 # nacos地址
gateway:
routes:
- id: userservice
uri: lb://userservice
predicates:
- Path=/user/**,/address/**
- id: itemservice
uri: lb://itemservice
predicates:
- Path=/item/**
- id: orderservice
uri: lb://orderservice
predicates:
- Path=/order/**,/pay/**
- id: searchservice
uri: lb://searchservice
predicates:
- Path=/search/**
default-filters:
- AddRequestHeader=authorization, 2
globalcors: # 全局的跨域处理
add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
corsConfigurations:
'[/**]':
allowedOrigins: # 允许哪些网站的跨域请求
- "http://localhost:9001"
- "http://localhost:9002"
- "http://127.0.0.1:9001"
- "http://127.0.0.1:9002"
allowedMethods: # 允许的跨域ajax的请求方式
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders: "*" # 允许在请求中携带的头信息
allowCredentials: true # 是否允许携带cookie
maxAge: 360000 # 这次跨域检测的有效期
总结 :
导入nacos依赖(注册nacos用)
- 导入gateway依赖
- nacos发现依赖(注册服务用)
3. item-service模块
3.1 MyBatisConfig(分页拦截器,如果使用分页功能,必须设置)
3.2 constants包
由于该服务需要使用消息队列,所以需要定义常量类,和注入转换器,队列,并且绑定
3.3 web
需要在controller层发送消息(mq)
-
3.4 配置文件yml
nacos服务名
- nacos地址
-
3.5 pom.xml
由于需要远程调用,所以需要Feign-api依赖
-
3.6 主应用类
由于该服务需要使用feign所以需要在主应用类加上该注解
-
4.2 interceptors包
自定义拦截器(用于获取所有请求头中的authorization),基于ThreadLocal实现
注意:由于Feign远程调用不会传authorization,所以需要authorization不为空才可以设置id
4.3 pojo包
RequestParams
ThreadLocal设计类
由于该服务需要使用feign所以需要在主应用类加上该注解
nacos服务名
- nacos地址
-
4.7 pom.xml
由于需要远程调用,所以需要Feign-api依赖
-
5.search-service模块(es)
5.1 constants
由于需要实现mysql和es的数据同步.所以需要监听商品服务的增删,需要用mq实现写法仿照item中的
5.2 controller
-
5.3 主应用类
由于该服务需要使用feign所以需要在主应用类加上该注解
nacos服务名
- nacos地址
-
5.5 pom.xml
由于需要远程调用,所以需要Feign-api依赖
- nacos发现依赖(注册服务用)
- 由于该服务需要和网页通信,所以千万别忘了引starter-web依赖
搜索服务中不可以使用mybatis-plus的相关功能,因为会耦合,所以需要用Feign,不可以引mybatis-plus依赖.
6. user-service模块
拦截器参照order-service模块做
- 主应用类,yml,pom都没有什么特别的
7.共性错误!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 分页没有实现拦截器,添加即可用
- feign中引入太多依赖,导致和其它包依赖冲突
- 因为测试类 包名错误 导致单元测试错误
- 测试类需要包名并且和主应用类的根包名相同
- POST请求记得封装RequestParams类
- xxxServiceName is blank 没写nacos的服务名
- 网页报503别慌张等会再访问,还不好使去看nacos服务有没有注册进去
- 批量导入时一定注意导入的Doc而不是原来的实体类
- Feign远程调用不会传userId
- 运行项目之前记得查看网关是否运行
- 想用Feign,引依赖,主应用类配置开启Feign注解
- 实体类一定一定看好引的是哪个包的实体类
- 搜索服务中自动补全功能需要在实体类中加suggestion属性
- BeanUtils.copyProperties(address, orderLogistics);快速导入