简介
Ribbon简介
分布式系统中,各个微服务会部署多个实例,如何将服务消费者均匀分摊到多个服务提供者实例上,就要使用到负载均衡器
Ribbon 是负载均衡器 ,它提供了很多负载均衡算法,例如轮询、随即等,在配置服务提供者地址后,可以将服务消费者请求均匀的分发
搭建注册中心
参考:搭建注册中心
搭建服务提供者
第一步:
在demo1(搭建服务提供者)基础上编写一个controller简单模拟一下服务提供者业务:
controller:如下
@RestController
public class TestController {
@GetMapping("/test/ok")
public Map<String,Object> test() {
Map<String,Object> map = new HashMap<>(16);
map.put("code", "ok90");
return map;
}
@GetMapping("/test4")
public String test2(@RequestParam(name = "param1") String param1) {
return param1;
}
@PostMapping("/test3")
public Integer test3(Integer id) {
return id;
}
@GetMapping("/test2")
public String test2() {
return "ok 90";
}
@GetMapping("/test-ribbon")
public String testRibbon() {
System.out.println("有新的请求 woshi 90");
return "success 90";
}
}
第二步:
复制一份项目 叫demo2 (controller里面返回结果改成对应启动端口方便看见调用哪个服务)启动端口8092
搭建服务消费者
idea创建一个ribbon微服务项目:
1 application.yml配置文件:
server:
port: 8084
spring:
application:
name: ribbon-demo
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
2 pom文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.gj</groupId>
<artifactId>cloud-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ribbon</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ribbon</name>
<description>SpringCloud组件之Ribbon</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3 启动类添加注解@EnableEurekaClient
@SpringBootApplication
@EnableEurekaClient
public class RibbonApplication {
public static void main(String[] args) {
SpringApplication.run(RibbonApplication.class, args);
}
}
4 编写配置文件类RibbonConfig:
调用服务使用RestTemplate,负债均衡使用RandomRule随机
@Configuration
public class RibbonConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public IRule ribbonRandomRule() {
return new RandomRule();
}
}
5 编写Ribbon TestRibbonController
@RestController
public class TestRibbonController {
@Resource
private RestTemplate restTemplate;
@GetMapping("/test")
public String test() {
return restTemplate.getForObject("http://demo/test-ribbon", String.class);
}
}
6 启动注册中心 服务提供者demo1和demo2 服务消费者Ribbon
访问注册中心 localhost:8761 管理页面可以看见:
ribbon启动在8084端口,Demo服务提供者两个实例在8090和8092
测试
访问localhost:8084/test 可以看见结果:调用90端口
刷新一次,调用的是92端口:
下一篇使用Ribbon实现自定义负债均衡,欢迎一起学习