# SpringCloud-Example **Repository Path**: Jason_jin/SpringCloud-Example ## Basic Information - **Project Name**: SpringCloud-Example - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-06-09 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpringCloudStudy > SpringCloud-Example研究测试 ## 模块解释 ### eureka-server 注册中心 - [eureka-server](eureka-server) - 集群启动 - `java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1` - `java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2` - `java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer3` --- ### eureka-producer 生产者 - [eureka-producer](eureka-producer) - 集群启动 - ` java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --config.producer.instance=1 --server.port=8001` - ` java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --config.producer.instance=2 --server.port=8002` --- ### eureka-consumer 消费者 > 测试三种web服务客户端(LoadBalancerClient、Ribbon、Feign) - [eureka-consumer](eureka-consumer) --- ### hystrix 服务容错保护 > 使用feign加入hystrix
> 通过服务降级、资源隔离、断路器方式来防止服务不可用 - [eureka-consumer-feign-hystrix](eureka-consumer-feign-hystrix) - 服务降级未使用 --- ### Hystrix 监控面板 > 只测试了单节点监控,集群需要加入Turbine,未测试 - [hystrix-dashboard](hystrix-dashboard) --- ### config-server-git 配置中心(Git 版与动态刷新) > 使用配置中心远程读取github上的配置文件 - [config-server-git](config-server-git) - 构建了 config-server,连接到 Git 仓库 - 在 Git 上创建了一个 config-repo 目录,用来存储配置信息 - ` java -jar target/config-server-git-0.0.1-SNAPSHOT.jar --server.port=12000` - ` java -jar target/config-server-git-0.0.1-SNAPSHOT.jar --server.port=12001` --- ### config-client 配置中心客户端(Git 版与动态刷新) - [config-client](config-client-git) - 构建了 config-client,来获取 Git 中的配置信息 - 在 config-client 中开启了 Refresh,动态刷新配置信息 --- ### config-server-bus配置中心(bus动态刷新) - [config-server-bus](config-server-bus) - 此实例集成配置中心、git远程资源库、bus - 通过刷新来控制bus进行消息群体推送 - 可集群启动 - 刷新配置命令 - **整体**刷新命令`curl -X POST http://localhost:13000/actuator/bus-refresh/` - **局部**刷新命令`curl -X POST http://localhost:13000/actuator/bus-refresh/{destination}` - > destination 参数来定位要刷新的应用程序,例如/actuator/bus-refresh/config-client-bus:13000,如果要刷新特定的微服务`config-client-bus:**` --- ### config-client-bus配置中心(bus动态刷新) - [config-client-bus](config-client-bus) - 此实例集成配置中心、bus - 可集群 --- ### gateway-zuul网关(Zuul) - [gateway-zuul](gateway-zuul) - 服务默认转发规则: - 通过服务ID转发,转发到 producer 服务的请求规则为:`/producer/**`,转发到 consumer 服务的请求规则为:`/consumer/**` - 转换为 - 也可以手动配置路由转发规则 --- ### 分布式链路跟踪 Sleuth与Zipkin - [sleuth](sleuth) - Sleuth - 为服务之间调用提供链路追踪,然后存储到Zipkin - 提供内容 - 耗时分析:通过 Sleuth 可以很方便的了解到每个采样请求的耗时,从而分析出哪些服务调用比较耗时 - 可视化错误:对于程序未捕捉的异常,可以通过集成 Zipkin 服务界面上看到 - 链路优化:对于调用比较频繁的服务,可以针对这些服务实施一些优化措施 - Zipkin - 提供存储、展示数据功能 - 安装方式 - java8以上 - `curl -sSL https://zipkin.io/quickstart.sh | bash -s` - `java -jar zipkin.jar` - docker - docker run -d -p 9411:9411 openzipkin/zipkin - 访问查看监控平台 - 存储方式使用了In-Memory --- ### 服务网关 Gateway - [gateway](gateway) - 路由,配置见[README](gateway/README.md) > routes配置 - 过滤 - 限流 - 集成Hystrix --- --- ## 教程 ### 1. 服务提供与调用 Eureka 1. 配置host,为了注册中心集群 > 127.0.0.1 peer1
> 127.0.0.1 peer2
> 127.0.0.1 peer3
2. 集群启动注册中心 [eureka-server 注册中心](#eureka-server-注册中心) 3. 集群启动生产者 [eureka-producer 生产者](#eureka-producer-生产者),修改配置文件指向集群Eureka 4. 启动消费者 [eureka-consumer 消费者](#eureka-consumer-消费者),修改配置文件指向集群Eureka 5. 访问消费者-LoadBalancer 6. 访问消费者-Ribbon 7. 访问消费者-LoadBalancer ### 2. 服务容错保护 Hystrix - 启动 1. 启动注册中心 [eureka-server 注册中心](#eureka-server-注册中心) 2. 启动生产者 [eureka-producer 生产者](#eureka-producer-生产者) 3. 启动Hystrix [hystrix 服务容错保护](#hystrix-服务容错保护) 4. 访问 ,确认正常 5. 手动停止eureka-producer,访问,确认已经熔断 6. 启动eureka-producer,再次访问,发现正常 - 总结 1. 通过使用 Hystrix,我们能方便的防止雪崩效应,同时使系统具有自动降级和自动恢复服务的效果。 - 监控面板 1. 启动监控面板[Hystrix 监控面板](#hystrix-监控面板) 2. 访问 3. 启动注册中心[eureka-server 注册中心](#eureka-server-注册中心)、生产者[eureka-producer 生产者](#eureka-producer-生产者)、服务容错启动Hystrix [hystrix 服务容错保护](#hystrix-服务容错保护) 4. 在步骤2的界面上输入,点击Monitor Stream 5. 可以通过手动停止生产者进行测试 ### 3. 配置中心(Git 版与动态刷新、bus动态刷新) - 低配版 1. 启动注册中心 [eureka-server 注册中心](#eureka-server-注册中心) 2. 启动配置中心 [config-server-git 配置中心(Git 版与动态刷新)](#config-server-git-配置中心git-版与动态刷新) 3. 查看是否读取到数据,访问 4. 启动客户端来读取数据[config-client 配置中心客户端(Git 版与动态刷新)](#config-client-配置中心客户端git-版与动态刷新) 5. 访问来查看数据 6. 修改git仓库文件config-client-dev的neo的value、然后手动刷新:post执行 /actuator/refresh 刷新变量值`curl -X POST http://localhost:13000/actuator/refresh` 7. 需要高可用的话,启动多个配置中心服务端就可以了,代码已经支持 - 加入bus 1. 启动注册中心 [eureka-server 注册中心](#eureka-server-注册中心) 2. 启动配置中心 [config-server-bus配置中心(bus动态刷新)](#config-server-bus配置中心bus动态刷新) 3. 验证数据 4. 集群启动客户端[config-client-bus配置中心(bus动态刷新)](#config-client-bus配置中心bus动态刷新) 5. 验证数据, 6. 修改git仓库文件config-client-dev的neo的value,然后手动整体刷新`curl -X POST http://localhost:12000/actuator/bus-refresh` 7. 查看数据,发现两个客户端数据都改变了 8. 需要验证局部刷新直接看[config-server-bus配置中心(bus动态刷新)](#config-server-bus配置中心bus动态刷新) ### 4. 服务网关 Zuul - 路由(Router)、过滤器(Filter) 1. 启动注册中心 [eureka-server 注册中心](#eureka-server-注册中心) 2. 启动生产者 [eureka-producer 生产者](#eureka-producer-生产者) 3. 启动消费者 [eureka-consumer 消费者](#eureka-consumer-消费者) 4. 启动网关[gateway-zuul网关(Zuul)](#gateway-zuul网关zuul) 5. 通过网关访问eureka-consumer的服务, 6. 返回token is empty,证明过滤器已工作,加入token参数,访问 7. 测试正常 ### 5. 链路追踪 sleuth - 测试 1. 下载并启动zipkin服务端,命令见[分布式链路跟踪 Sleuth与Zipkin](#分布式链路跟踪-sleuth与zipkin) 2. 启动注册中心 [eureka-server 注册中心](#eureka-server-注册中心) 3. 启动[trace-b](sleuth/trace-b),[trace-a](sleuth/trace-a) 4. 访问 5. 访问查看调用过程 ### 6. 网关gateway - 路由 1. 启动注册中心 [eureka-server 注册中心](#eureka-server-注册中心) 2. 启动生产者 [eureka-producer 生产者](#eureka-producer-生产者) 3. 启动消费者 [eureka-consumer 消费者](#eureka-consumer-消费者) 4. 启动网关[服务网关 Gateway](#服务网关-gateway) 5. before_route `curl -H 'X-Request-Id:1' localhost:14100` 6. header_route `curl -H 'X-Request-Id:1' localhost:14100` 7. cookie_route `curl -H 'Cookie:name=forezp' localhost:14100` 8. path_router 9. 内部服务路由 10. Java 的流式 API 进行路由的定义 11. 测试框架自动生成的路由 - 过滤 1. 启动注册中心 [eureka-server 注册中心](#eureka-server-注册中心) 2. 启动生产者 [eureka-producer 生产者](#eureka-producer-生产者) 3. 启动消费者 [eureka-consumer 消费者](#eureka-consumer-消费者) 4. 启动网关[服务网关 Gateway](#服务网关-gateway) 5. 自定义局部过滤器 - [TokenFilter.java](gateway/src/main/java/cn/jason/gateway/filter/TokenFilter.java) - 6. 自定义全局过滤器 - [TimeCostFilter.java](gateway/src/main/java/cn/jason/gateway/filter/TimeCostFilter.java) - 访问任意地址 查看后台输出 7. 过滤器工厂 - [PrintParamsGatewayFilterFactory.java](gateway/src/main/java/cn/jason/gateway/filter/PrintParamsGatewayFilterFactory.java) - 访问任意地址 查看后台输出 - 限流 1. 启动注册中心 [eureka-server 注册中心](#eureka-server-注册中心) 2. 启动生产者 [eureka-producer 生产者](#eureka-producer-生产者) 3. 启动消费者 [eureka-consumer 消费者](#eureka-consumer-消费者) 4. 启动网关[服务网关 Gateway](#服务网关-gateway) 5. 自定义限流 运行[CustomerRouteTest.java](gateway/src/test/java/cn/jason/gateway/router/CustomerRouteTest.java),查看后台输出 6. 架构自带限流 访问并不停刷新查看后台输出