至此:一个正常微服务项目的主体功能已经完成
1:项目略做优化
1:把Feign服务启动类去掉
2:把Feign服务的配置文件去掉
3:在Feign服务新增@Configuration 配置Feign的负载均衡策略
2:服务启动并调用接口测试
http://127.0.0.1:9000/nacos-consumer/seataTest/purchase/commit
注意观察数据库数据 可见已经实现了正常情况下的 分布式事务




3:调用流程
1:配置VM启动参数
-Xms256M (设置JVM堆的初始大小)
-Xmx256M(设置JVM堆的最大大小)
-Dcsp.sentinel.dashboard.server=localhost:10001 (设置sentinel 限流熔断 可视化界面)
-Dcsp.sentinel.app.type=1 (设置为网关sentinel类型 除了网关其他服务不用填 )
-javaagent:A:\Instrument\apache-skywalking-apm-6.5.0\apache-skywalking-apm-bin\agent\skywalking-agent.jar(设置skywalking 链路追踪界面)
-Dskywalking.agent.service_name=gateway (设置该服务再skywalking界面的服务名称)
2:服务启动
Gateway服务 9000 服务名称:gateway
Consumer服务 9991 服务名称:nacos-consumer
Provider服务 9992 服务名称:nacos-provider(同名)
ProviderOther服务 9993 服务名称:nacos-provider(同名)
Storage服务 9995 服务名称:nacos-storage(同名)
3:服务注册到到Nacos

4:启动Sentinel (限流熔断功能)图形化界面


5:启动SkyWalking (链路追踪功能)图形化界面


4:进行请求
1:外部接口请求网关
http://127.0.0.1:9000/nacos-consumer/seataTest/purchase/commit
2:网关的Sentinel 进行限流 其可视化界面 sentinel-Dashboard可以查询
3:网关经过Nacos服务注册发现中心功能 查找到nacos-consumer的地址
请求先经过网关服务的负载均衡处理 然后转发到nacos-consumer服务
4:在进入nacos-consumer(微服务)之后
微服务的Sentinel 会先进行限流以及熔断的判断
5:nacos-consumer 以Jar包的方式使用Feign功能
6:在使用Feign请求其他服务的时候
Feign经过Nacos服务注册发现中心功能选择调用的微服务
请求先经过Feign的负载均衡处理 然后转发到对应的服务服务
如:服务名称nacos-provider
可能转发到 Provider服务
也可能 ProviderOther服务
这两个服务实现了流量压力的分摊
Storage服务
Provider服务 (服务名称nacos-provider)
ProviderOther服务 (服务名称nacos-provider)
7:测试分布式事务seata的AT模式
测试情况 1
Consumer 先请求 Storage服务 成功
Consumer 后请求 Provider服务 成功
Storage服务中Storage 库的storage表 数量减1
Provider服务中Order 库的order表 新增1条数据
Provider服务后续逻辑成功
测试情况 2
Consumer 先请求 Storage服务 成功
Consumer 后请求 ProviderOther服务 失败
Storage服务中Storage 库的storage表 数量减1
Provider服务中Order 库的order表 新增1条数据
Provider服务后续逻辑成功(写死抛异常) 失败
然后根据 storage表的undo_log 进行storage表 的回滚
然后根据 order表的undo_log 进行order表 的回滚
8:可以查看数据库确认上述情况
9:结果响应到对应的界面
5:查看Sentinel 与 SkyWalking 图形界面
Sentinel 两次成功 两次失败


SkyWalking
列表:
快速查看响应时间(可以点击去对应的Mysql解释 有一整个Mysql的执行顺序)


树型图
快速理清楚调用关系:

表格:
快速总览整体调用的 效率与关系

项目连接
请配合项目代码食用效果更佳:
项目地址:
https://github.com/hesuijin/spring-cloud-alibaba-project
Git下载地址:
https://github.com.cnpmjs.org/hesuijin/spring-cloud-alibaba-project.git
https://github.com/hesuijin/spring-cloud-alibaba-project
Git下载地址:
https://github.com.cnpmjs.org/hesuijin/spring-cloud-alibaba-project.git
网友评论