0%

Spring Cloud Netflix

五大组件:
image.png

Eureka:注册中心
Ribbon:负载均衡
FeintClient:客户端服务
Zuul:网关
Hystrix:断路器

openfeign:(服务调用)

你可以按照Ribbon的方式调用(具体参考:https://www.yuque.com/btcabc/java/eureka)
这里是采用Feign的依赖使用.
1添加Maven依赖:

1
2
3
4
 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2在的启动类上加注解@EnableFeignClients
3在调用时,写一个接口类,类上加注解@FeignClient(“应用名”)
在抽象方法上,添加注解@RequestMapping(“/服务名”)
你也可以使用其他的REST风格请求.
你可以像使用本地接口一样的调用远程服务.

Ribbon:负载均衡策略

1Maven依赖:

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

2在启动类下任何类中添加以下代码

1
2
3
4
@Bean // IRule接口可以自定义策略
public IRule get(){
return new RandomRule(); // 随机策略
}

我们定义了一个IRule接口,该接口允许用户自定义负载均衡策略.(默认为轮训)
其他设置请参考下图.

Hystrix Dashboard:(监控API)

首先我们要单独开启一个监控端信息,即豪猪面板.
1Maven依赖:

1
2
3
4
5
6
7
8
9
10
<!--        数据流-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 监控中心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

2在启动类上添加注解@EnableHystrixDashboard
3程序运行后访问:http://localhost:9001/hystrix/

然后我们需要在监控的服务中开启数据流并监控.
一般情况下,这个监控需要有在网关服务上即可.
1Maven依赖:

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2在启动类下任何类中添加以下代码:

1
2
3
4
5
6
7
8
9
//增加一个servlet
@Bean
public ServletRegistrationBean hystrixMetricsStreamServlet(){
ServletRegistrationBean servletRegistrationBean =
new ServletRegistrationBean(new HystrixMetricsStreamServlet());
servletRegistrationBean.addUrlMappings("/actuator/hystrix.stream");
// servletRegistrationBean.setName("HystrixMetricsStreamServlet");
return servletRegistrationBean;
}

3为了调试方便,建议修改配置文件

1
2
# 以IP形式暴露
eureka.instance.prefer-ip-address=true

4我们测试数据流是否正常
http://localhost:8083/actuator/hystrix.stream

如无数据,请发送调用任意服务请求.
现在你可以回到监控面板输入地址去测试了,测试结果如下图所示:

为什么Stream的地址不是locahost而是IP,因为我准备把他监控和运行分开部署,所以才需要暴露IP,如果只是本机测试完全可以使用locahost省时又省力。

Hystrix:(断路器)

1Maven依赖:

1
2
3
4
5
<!-- 添加断路器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

2在启动类上添加注解@EnableHystrix //开启断路器
3在具体的调用方法上面添加

1
@HystrixCommand(fallbackMethod ="error")  //当前服务调用出错啦,调用默认方法

此外最好一个一个错误的方法,当服务熔断时返回.

Zuul:(网关)

1Maven依赖:

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

2在启动类上添加注解
@EnableZuulProxy _// 开启zuul网关
_@EnableEurekaClient // 开启链接Eureka注册中心
3通过动态路由访问: http://locahost:7002/应用名/服务名
如: http://localhost:7002/con3/hello

GateWay(动态路由):

1Maven依赖:

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

2配置文件:

1
2
3
4
# 开启动态路由
spring.cloud.gateway.discovery.locator.enabled=true
# 开启名称服务大小写忽略
spring.cloud.gateway.discovery.locator.lower-case-service-id=true

3在启动类上添加注解@EnableEurekaClient
4通过动态路由访问: http://locahost:6666/应用名/服务名
如:http://localhost:6666/con3/hello

自由学习:

更多资料请参考Spring官网,Spring Cloud Netflix部分内容:
https://spring.io/projects/spring-cloud-netflix