1、这次主要是集成了Gateway和Sentinel,目前的调用链路是:
个人理解:
- 对外提供的接口统统走网关,如果是内部系统调用,则没必要走网关,直接通过RPC进行调用
- service A可以调用 dao B,当然也可以直接调用 Service B来达到目的。直接调用dao B的原因前面的文章里解释过,问题在于是否可以直接调用Service B。之前看过孙玄的视频,不建议service横向调用,可以在service和dao之前再提取一层公共服务层,这样就避免了横向调用。他的原则是只能从上往下调用。不过个人解决这个公共层其实很难提取出来,因为界限很模糊,实现起来费脑。我觉得直接横向调用问题也不大,就像我们在做单体架构程序时,有时也会在相互平台的service之间进行调用,减少代码复写的情况。如果是简单的交互接口可以直接调用dao,如果是复杂的业务逻辑,service B已经实现了,而且业务界限上也属于service B,则横向调用也合理。如果提取公共的服务接口层来避免横向调用,那么有个问题就是如果这个公共服务层提取的是一些和业务逻辑关系不太的服务还可以操作,如果业务本身就是属于service B,那么放到公共层也不太合理。(有更好的建议欢迎留言)
2、添加的依赖文件为:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!--# 该依赖提供了sentinel对spring cloud gateway框架的适配-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
</dependency>
<!--# 连接sentinel控制台-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
</dependency>
3、在Gateway与Sentile集成的时候主要添加的配置文件为:
sentinel:
transport:
#配置Sentin dashboard地址
dashboard: localhost:8080
# 默认8719端口,假如被占用了会自动从8719端口+1进行扫描,直到找到未被占用的 端口
port: 8719
gateway:
routes:
- id: provider
uri: lb://iot-provider
predicates:
- Path=/api/provider/**
filters:
- RewritePath=/api/provider/(?<segment>.*),/$\{segment}
- sentinel的Dashboard的服务地址
- gateway的路由规则
4、如果监控controller接口,则只需要加上@SentinelResource(value="supplier-list")注解即可,同样service方法也可以。
4、如果使用sentinel监控dubbo接口的调用,添加以下依赖即可:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-dubbo-adapter</artifactId>
</dependency>
代码连接 https://github.com/buff0000/iot tag:v0.0.4