接上一篇:Spring cloud微服务搭建(五)——Eureka注册服务
Ribbon是Netflix发布的开源项目,提供客户端的软件负载均衡算法。
Ribbon属于进程内负载均衡,作为一个类库,集成于消费方进程中。消费方通过ribbon连接到目标服务器。
集成ribbon仅针对消费方。以下步骤码均在消费方中进行。
Maven依赖
ribbon在客户端进行负载均衡时,首先要从Eureka server获取可用的服务器列表。
因此,要引入eureka 客户端依赖:
- 官方建议用
spring-cloud-starter-netflix-eureka-client
,代替已经过时的spring-cloud-starter-eureka
。 -
spring-cloud-starter-netflix-eureka-client
已经内置对ribbon的支持,因此无需再引入ribbon依赖。否则,可能会报错"no instances available for …"
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>3.0.0</version>
</dependency>
application.yaml
要配置eureka 客户端:
-
eureka.client.service-url
:与注册中心进行交互的地址,也就是监控页面-
service-url
是map键值对类型 -
defaultZone
:表示默认的注册中心地址
-
-
eureka.client.register-with-eureka
:是否向注册中心注册自己,消费方可以不注册,为false
-
eureka.client.fetch-registry
:false-表示自己为注册中心,此处为true
server:
port: 80
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/
fetch-registry: true
register-with-eureka: false
配置类中的RestTemplate
@LoadBalanced
:开启负载均衡
- 被
@LoadBalanced
注解的RestTemplate
类,spring会将请求地址中的application name
转为IP、端口号形式。
@Configuration
public class Config {
@Bean
@LoadBalanced
public RestTemplate RestTemplate(){
return new RestTemplate();
}
}
Controller控制器
主要修改请求地址中的IP、端口号为服务方中配置的spring.application.name
的值,此处为:springcloud-provider
#Spring的配置
spring:
application:
name: springcloud-provider
修改前:“http://localhost:8001”;
修改后:“http://SPRINGCLOUD-PROVIDER”
@RestController
public class DeptController {
@Autowired
private RestTemplate restTemplate;
//private static final String REST_URL_PREFIX="http://localhost:8001";//
private static final String REST_URL_PREFIX="http://SPRINGCLOUD-PROVIDER";
@RequestMapping("/consumer/dept/list")
public List<Department> queryAll(){
return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list", List.class);
}
}
启动类
新增@EnableEurekaClient
注解,开启对Eureka Client的支持
@SpringBootApplication
@EnableEurekaClient
public class DeptConsumer_80 {
public static void main(String[] args) {
SpringApplication.run(DeptConsumer_80.class,args);
}
}
测试执行
服务提供方单点
在浏览器中输入http://localhost/consumer/dept/list,返回页面如下:
多个服务提供方
为了体现ribbon的负载均衡功能,
- 新建一个数据库db02
- 新增一套服务提供方,连接新的数据库db02
- 两个服务提供方yaml配置文件中的
spring.application.name
值保持一致,均为:springcloud-provider
这是ribbon对两套服务提供方实行负载均衡的前提条件。
-
默认使用的是轮询算法
则页面返回值,交替出现db01 ,和db02的数据。
若其中一台服务跳闸,命中这台机器时,页面会返回报错。
更多:
Spring cloud开发环境搭建(一)——maven依赖
Spring cloud微服务搭建(三)—— Spring cloud服务提供方
Spring cloud微服务搭建(四)——Spring cloud 消费方
Spring cloud微服务搭建(五)——Eureka注册服务