目录
1、Ribbon
(1)概念
(2)作用
(3)架构图
2、Ribbon案例说明
3、搭建Eureka服务端
(1)创建maven工程
(2)导入依赖
(3)配置application.yml
(4)创建主启动类
(5)启动Eureka注册中心
3、搭建服务提供者Provider8003
(1)创建maven工程
(2)导入依赖
(3)配置application.yml
(4)创建启动类
(5)创建controller
4、搭建服务提供者Provider8005(复制8003端口)
(1)点击下方service
(2)复制端口
(3)测试服务Provider8005
【springCloud|SpringCloud——Ribbon详解+例子】5、搭建服务消费者(Ribbon)
(1)创建maven工程
(2)导入依赖
(3)配置application.yml
(4)创建主启动类
(5)创建配置类配置远程调用
(6)创建controller
6、测试
7、Ribbon自定义负载均衡策略
(1)Ribbon负载均衡策略
(2)添加配置类指定负载均衡策略
(3)修改启动类的Ribbon注解
1、Ribbon
(1)概念
Ribbon是实现一套客户端负载均衡的工具,主要功能是提供客户端的软件负载均衡算法和服务调用。(2)作用
Ribbon是本地负载均衡,在调用微服务接口时,会在服务注册中心获取调用的服务信息,并缓存到本地JVM中,从而在本地实现远程调用。(3)架构图
Ribbon=负载均衡+RestTemplate远程调用
Ribbon负载均衡默认轮询,即每个服务依次处理请求。
如:有1,2,3,4个请求,服务1处理请求1,3,服务2处理请求2,4
文章图片
2、Ribbon案例说明
一个Eureka注册中心,服务消费者consumer8004,服务提供者provider8003,provider8005,服务消费者通过Ribbon轮询调用服务提供者,如下图:
文章图片
3、搭建Eureka服务端 (1)创建maven工程
文章图片
(2)导入依赖
导入Eureka服务端、web模块依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
(3)配置application.yml
①服务端口为7001;
②Eureka服务端主机名;
③Eureka客户端:
register-with-eureka:是否在服务中心注册
fetchRegistry:是否可以在注册中心被发现
service-url:服务中心url地址
server:
port: 7001eureka:
instance:
hostname: localhostclient:
register-with-eureka: false
fetchRegistry: false
service-url:
defaultZone: http://localhost:7001/eureka
(4)创建主启动类
@EnableEurekaServer:Eureka服务端注解
@SpringBootApplication
@EnableEurekaServer
public class Eureka7001 {
public static void main(String[] args) {
SpringApplication.run(Eureka7001.class,args);
}
}
(5)启动Eureka注册中心
访问http://localhost:7001
文章图片
3、搭建服务提供者Provider8003 (1)创建maven工程
文章图片
(2)导入依赖
导入Eureka客户端、web模块、监控依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
(3)配置application.yml
①配置服务端口号为8003;
②配置服务应用名称;
服务消费者指定名称时为该服务应用名称
③配置Eureka注册中心,开启注册,指明注册中心地址。
server:
port: 8003spring:
application:
name: Provider83and85eureka:
client:
register-with-eureka: true
fetchRegistry: true
service-url:
defaultZone: http://localhost:7001/eureka
(4)创建启动类
@EnableEurekaClient:指明该服务为Eureka客户端
@SpringBootApplication
@EnableEurekaClient
public class Provider8003 {
public static void main(String[] args) {
SpringApplication.run(Provider8003.class,args);
}
}
(5)创建controller
@Value注解是将值与application.yml配置文件对应值绑定
此处绑定端口号,controller返回端口号。
@RestController
public class HelloController {
@Value("${server.port}")
private String port;
@GetMapping("/hello")
public String hello(){
return port;
}
}
4、搭建服务提供者Provider8005(复制8003端口)
由于Provider8003服务和Provider8005服务内容一样,我们可以直接通过复制端口启动8005服务,这就是上方controller为什么返回端口号原因,具体步骤如下:(1)点击下方service
文章图片
若下方没有service,可以到View打开,如下图:
文章图片
文章图片
文章图片
(2)复制端口
-Dserver.port指明复制后的端口号
文章图片
文章图片
(3)测试服务Provider8005
访问http://localhost:8005/hello
文章图片
5、搭建服务消费者(Ribbon) (1)创建maven工程
文章图片
(2)导入依赖
导入Eureka客户端、web、监控依赖
注意:Eureka依赖包含Ribbon依赖,所以不用单独引用Ribbon依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
(3)配置application.yml
①配置服务·端口号为8004;
②配置服务名称为:Consumer8004;
③配置Eureka客户端,开启注册。配置注册中心地址。
server:
port: 8004spring:
application:
name: Consumer8004eureka:
client:
register-with-eureka: true
fetchRegistry: true
service-url:
defaultZone: http://localhost:7001/eureka
(4)创建主启动类
开启Eureka客户端,Ribbon客户端
指定Ribbon调用服务名称name
@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "PROVIDER83AND85")
public class Consumer8004 {public static void main(String[] args) {
SpringApplication.run(Consumer8004.class,args);
}
}
(5)创建配置类配置远程调用
@LoadBalanced:负载均衡注解
@Configuration
public class ResConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
(6)创建controller
①PROVIDER8003:服务提供者的名称,其在注册中心上注册,可以通过该名称找到对应ip地址;
②restTemplate.getForObject(”远程调用服务ip地址“,“调用服务方法返回类型”)
@RestController
public class HelloController {
//调用服务地址
public static final String url="http://PROVIDER83AND85";
@Autowired
RestTemplate restTemplate;
@GetMapping("consumer")
public String hello(){
return restTemplate.getForObject(url+"/hello",String.class);
}
}
6、测试
访问:http://localhost:8004/consumer,Ribbon使用轮询方式调用
文章图片
文章图片
7、Ribbon自定义负载均衡策略 (1)Ribbon负载均衡策略
Ribbon负载均衡策略:(2)添加配置类指定负载均衡策略
- RoundRobinRule 轮询,默认策略。
- RandomRule随机
- RetryRule 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务
- WeightedResponseTimeRule对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择
- BestAvailableRule 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
- AvailabilityFilteringRule 先过滤掉故障实例,再选择并发较小的实例
- ZoneAvoidanceRule 默认规则,复合判断server所在区域的性能和server的可用性选择服务器
此处为随机策略
@Configuration
public class MySelfRule {@Bean
public IRule myRule(){
return new RandomRule();
//定义为随机
}
}
(3)修改启动类的Ribbon注解
文章图片
推荐阅读
- 数据库|昨晚,我们的消费者居然停止消费kafka集群数据了
- 消息队列|MQ的分类与选型
- SpringCloud|RestTemplate 用法详解
- 常见报错|Parameter ‘contractState‘ not found. Available parameters are [request, page, param1, param2]
- kafka|kafka之消息消费者基本知识
- Maven|微服务项目(maven父子级项目)怎么打包
- SpringCloud|什么是Eureka(Eureka能干什么?Eureka怎么用?)
- elasticsearch|Elasticsearch 参数优化
- SSM+VUE项目(传智健康)|03-预约管理-检查项管理的增删改查页面完善