SpringCloud-Example研究测试
- eureka-server
- 集群启动
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer3
- eureka-producer
- 集群启动
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --config.producer.instance=1 --server.port=8001java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --config.producer.instance=2 --server.port=8002
测试三种web服务客户端(LoadBalancerClient、Ribbon、Feign)
使用feign加入hystrix
通过服务降级、资源隔离、断路器方式来防止服务不可用
- eureka-consumer-feign-hystrix
- 服务降级未使用
只测试了单节点监控,集群需要加入Turbine,未测试
使用配置中心远程读取github上的配置文件
- config-server-git
- 构建了 config-server,连接到 Git 仓库
- 在 Git 上创建了一个 config-repo 目录,用来存储配置信息
java -jar target/config-server-git-0.0.1-SNAPSHOT.jar --server.port=12000java -jar target/config-server-git-0.0.1-SNAPSHOT.jar --server.port=12001
- config-client
- 构建了 config-client,来获取 Git 中的配置信息
- 在 config-client 中开启了 Refresh,动态刷新配置信息
- 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
- 可集群
- gateway-zuul
- 服务默认转发规则:
- 通过服务ID转发,转发到 producer 服务的请求规则为:
/producer/**,转发到 consumer 服务的请求规则为:/consumer/** - http://localhost:9000/FeignHello/index?name=jason转换为http://localhost:14000/eureka-consumer/FeignHello/index?name=jason
- 通过服务ID转发,转发到 producer 服务的请求规则为:
- 也可以手动配置路由转发规则
- sleuth
- Sleuth
- 为服务之间调用提供链路追踪,然后存储到Zipkin
- 提供内容
- 耗时分析:通过 Sleuth 可以很方便的了解到每个采样请求的耗时,从而分析出哪些服务调用比较耗时
- 可视化错误:对于程序未捕捉的异常,可以通过集成 Zipkin 服务界面上看到
- 链路优化:对于调用比较频繁的服务,可以针对这些服务实施一些优化措施
- Zipkin
- 提供存储、展示数据功能
- 安装方式
- java8以上
curl -sSL https://zipkin.io/quickstart.sh | bash -sjava -jar zipkin.jar
- docker
- docker run -d -p 9411:9411 openzipkin/zipkin
- 直接下载
- java8以上
- 访问http://localhost:9411查看监控平台
- 存储方式使用了In-Memory
- 配置host,为了注册中心集群
127.0.0.1 peer1
127.0.0.1 peer2
127.0.0.1 peer3
- 集群启动注册中心 eureka-server 注册中心
- 集群启动生产者 eureka-producer 生产者,修改配置文件指向集群Eureka
- 启动消费者 eureka-consumer 消费者,修改配置文件指向集群Eureka
- 访问消费者-LoadBalancer http://localhost:9000/LBCHello/index?name=jason
- 访问消费者-Ribbon http://localhost:9000/RibbonHello/index?name=jason
- 访问消费者-LoadBalancer http://localhost:9000/FeignHello/index?name=jason
- 启动
- 启动注册中心 eureka-server 注册中心
- 启动生产者 eureka-producer 生产者
- 启动Hystrix hystrix 服务容错保护
- 访问 http://localhost:9003/FeignHystrixHello/index?name=jason,确认正常
- 手动停止eureka-producer,访问http://localhost:9003/FeignHystrixHello/index?name=jason,确认已经熔断
- 启动eureka-producer,再次访问http://localhost:9003/FeignHystrixHello/index?name=jason,发现正常
- 总结
- 通过使用 Hystrix,我们能方便的防止雪崩效应,同时使系统具有自动降级和自动恢复服务的效果。
- 监控面板
- 启动监控面板Hystrix 监控面板
- 访问http://localhost:11000/hystrix
- 启动注册中心eureka-server 注册中心、生产者eureka-producer 生产者、服务容错启动Hystrix hystrix 服务容错保护
- 在步骤2的界面上输入http://localhost:9003/actuator/hystrix.stream,点击Monitor Stream
- 可以通过手动停止生产者进行测试
- 低配版
- 启动注册中心 eureka-server 注册中心
- 启动配置中心 config-server-git 配置中心(Git 版与动态刷新)
- 查看是否读取到数据,访问http://localhost:12000/config-client/dev/master
- 启动客户端来读取数据config-client 配置中心客户端(Git 版与动态刷新)
- 访问http://localhost:13000/info来查看数据
- 修改git仓库文件config-client-dev的neo的value、然后手动刷新:post执行 /actuator/refresh 刷新变量值
curl -X POST http://localhost:13000/actuator/refresh - 需要高可用的话,启动多个配置中心服务端就可以了,代码已经支持
- 加入bus
- 启动注册中心 eureka-server 注册中心
- 启动配置中心 config-server-bus配置中心(bus动态刷新)
- 验证数据http://localhost:12000/config-client/dev
- 集群启动客户端config-client-bus配置中心(bus动态刷新)
- 验证数据http://localhost:13000/info,http://localhost:13001/info
- 修改git仓库文件config-client-dev的neo的value,然后手动整体刷新
curl -X POST http://localhost:12000/actuator/bus-refresh - 查看数据,发现两个客户端数据都改变了
- 需要验证局部刷新直接看config-server-bus配置中心(bus动态刷新)
- 路由(Router)、过滤器(Filter)
- 启动注册中心 eureka-server 注册中心
- 启动生产者 eureka-producer 生产者
- 启动消费者 eureka-consumer 消费者
- 启动网关gateway-zuul网关(Zuul)
- 通过网关访问eureka-consumer的服务,http://localhost:14000/eureka-consumer/FeignHello/index?name=jason
- 返回token is empty,证明过滤器已工作,加入token参数,访问http://localhost:14000/eureka-consumer/FeignHello/index?name=jason&token=xx
- 测试正常
- 测试
- 下载并启动zipkin服务端,命令见分布式链路跟踪 Sleuth与Zipkin
- 启动注册中心 eureka-server 注册中心
- 启动trace-b,trace-a
- 访问http://localhost:15001/trace-a
- 访问http://localhost:9411/zipkin查看调用过程
- 路由
- 启动注册中心 eureka-server 注册中心
- 启动生产者 eureka-producer 生产者
- 启动消费者 eureka-consumer 消费者
- 启动网关服务网关 Gateway
- before_route
curl -H 'X-Request-Id:1' localhost:14100 - header_route
curl -H 'X-Request-Id:1' localhost:14100 - cookie_route
curl -H 'Cookie:name=forezp' localhost:14100 - path_router http://localhost:14100/path_route/s?wd=path_route
- 内部服务路由 http://localhost:14100/to_client/FeignHello/index?name=jason
- Java 的流式 API 进行路由的定义http://localhost:14100/java/customer/FeignHello/index?name=jason
- 测试框架自动生成的路由 http://localhost:14100/eureka-consumer/FeignHello/index?name=jason&token=1
- 过滤
- 启动注册中心 eureka-server 注册中心
- 启动生产者 eureka-producer 生产者
- 启动消费者 eureka-consumer 消费者
- 启动网关服务网关 Gateway
- 自定义局部过滤器
- 自定义全局过滤器
- 过滤器工厂
- 限流
- 启动注册中心 eureka-server 注册中心
- 启动生产者 eureka-producer 生产者
- 启动消费者 eureka-consumer 消费者
- 启动网关服务网关 Gateway
- 自定义限流 运行CustomerRouteTest.java,查看后台输出
- 架构自带限流 访问并不停刷新查看后台输出http://localhost:14100/limit/customer/FeignHello/index?name=jason&token=1