【记录】spring cloud 组件 Ribbon
ribbon是什么?
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。
简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。
简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。
如何使用:
首先,我们还是要引入依赖(引入eureka依赖自动包含ribbon),
服务端依赖:
<!-- SpringBoot整合eureka服务端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
服务端启动类:
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class AppEureka { public static void main(String[] args) { } }
服务端yml配置
###服务端口号
server:
port: 8300
###eureka 基本信息配置
eureka:
instance:
###注册到eurekaip地址
hostname: localhost
client:
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
###因为自己是为注册中心,不需要自己注册自己 是否将自己注册到eureka服务注册中心,默认为true
register-with-eureka: false
###因为自己是为注册中心,不需要检索服务 是否从服务注册中心获取可用的服务清单,默认为true
fetch-registry: false
客户端依赖:
<!-- SpringBoot整合eureka客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
某客户端启动demo
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.context.annotation.ComponentScan; import com.spring4all.swagger.EnableSwagger2Doc; @SpringBootApplication @EnableSwagger2Doc @EnableEurekaClient @ComponentScan("com") public class AppWeixin { public static void main(String[] args) { SpringApplication.run(AppWeixin.class, args); } }
客户端yml添加eureka
###服务名称(服务注册到eureka名称)
eureka:
client:
service-url:
defaultZone: http://localhost:8300/eureka
但是,eureka已经把ribbon集成到他的依赖里面去了,所以这里不需要再引用ribbon的依赖,如图:
要使用ribbon,只需要一个注解:
@Bean @LoadBalanced public RestTemplate restTemplate(){ RestTemplate restTemplate = new RestTemplate(); return restTemplate; }
在RestTemplate上面加入@LoadBalanced注解,这样子就已经有了负载均衡。
Ribbon核心组件 IRule
IRule是什么? 它是Ribbon对于负载均衡策略实现的接口, 怎么理解这句话? 说白了就是你实现这个接口,就能自定义负载均衡策略, 自定义我们待会儿来讲, 我们先来看看他有哪些默认的实现
默认是轮询策略
在Spring 的配置类里面把对应的实现作为一个Bean返回出去就行了。
@Bean public IRule iRule(){ return new RoundRobinRule(); }