springCloud框架,包含eureka,service provider,consumer搭建
一、创建服务提供方工程
1.本次以model工程创建服务提供方
1.1 pom.xml
1.2 application.yml文件
1.3 User.java
1.4 Usermapper.java
(通用mapper只写这一个接口即可实现增删改查CRUD所有功能,在xxService.java中直接调用固定方法名) 1.5 UserServuceImpl.java
1.6 UserController.java
1.7 启动项目,在浏览器客户端能正常访问即可。
2.创建服务消费方
2.1 pom.xml
2.2 application.yaml
2.3 启动类
2.4 User.java
2.5 服务消费方的UserController.java
2.6 测试Ribbon的LoadBalancer轮询获取多个服务方的其中一个地址。修改服务消费方application.yml中的配置(注释掉)
#user-service: #轮询获取服务方一个地址的接口 改为 随机获取服务方其中一个地址
#ribbon:
#NFLoadBalancerRuleClassName: com.netflix.loadBalancer.RandomRule
注意在服务消费方的表现层xxController.java中restTemplate.getForObject(Url url, Class responseType)按F7,第二次回到该方法后再次F7即可进入RibbonLoadBalancerClient中execute(){ getServer()}方法然后打断点查看请求到的服务方地址。
第一次请求eureka中的服务方:
第二次请求服务提供方的服务:
多次请求中会发现每次轮询调用相同服务方的其中一个地址。
放开上述配置内容后多次请求服务方,可以看到偶尔多次调用同一个服务方地址。
2.7 熔断器的注解@HystrixCommand中属性@HystrixProperty
首先找到ConsumerControler.java中import的包com.netflix.hystrix.xxxxx,点击到hystrix看到左侧引入的包中有一个HystrixCommandProperty,java
即找到其key的名字,值的单位是毫秒ms.
熔断器的原理:正常情况下熔断器CircuitBreaker处于closed关闭状态,当20个以上的请求中50%以上的请求结果失败时候,熔断器CircuitBreaker转为open打开状态,5秒钟之后熔断器转为half open半打开状态。在半打开状态时会放出部分请求通过,同样判断20个以上的请求中如果50%以上的请求结果成功,则熔断器再次转为关闭closed状态,否则还是转为opend状态,继续等待5秒钟判断20个以上的请求50%的请求成功率。
3.注册中心Eureka创建
3.1 pom.xml
3.2 application.yml
3.3 启动类
4.eureka的高可用
4.1 点击idea右上角的三角符号中edit configuration(编辑配置)
4.2
4.3 第二次启动eureka前修改配置中端口号和注册地址
4.4 启动注册中心,并查看注册成功的服务
5.熔断器Hystrix
配置在服务消费方项目中。
添加依赖spring-cloud-starter-netflix-hystrix.
服务消费方启动类中加注解@EnableCircuitBreaker
服务消费方的xxcongtroller.java中需要设置熔断的方法上加注解
@HystrixCommand(commandProperties = {
@HystrixProperty(name = “execution.isolation.thread.timeoutInMilliseconds”, value = “4000”)
}) // application.yml配置中也可设置
或者在配置文件application.yml中设置熔断时长:
Hystrix:
command:
default: #对该服务中所有方法的熔断时间设置
execution:
isolation:
thread:
timeoutInMilliseconds: 2000 熔断时长为2s.