天天看点

微服务调用Ribbon

Ribbon简介

Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为,为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等,当然,我们也可为Ribbon实现自定义的负载均衡算法

在SpringCloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从EurekaServer获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。下图展示了Ribbon与Eureka配合使用时的架构:

微服务调用Ribbon

Ribbon的初步应用

Ribbon是客户端负载均衡,所以是集成在消费端,也就是consumer端,本例在前面的基础上修改microservice-student-consumer-80模块

首先,引入依赖,在pom.xml加入ribbon相关依赖:

<!--ribbon相关依赖-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
           

然后在application.yml加入(为了使ribbon结合eureka来调用服务提供者):

eureka:
  client:
    register-with-eureka: false
    service-url:
      defaultZone: http://eureka2001.test.com:2001/eureka/,http://eureka2002.test.com:2002/eureka/,http://eureka2003.test.com:2003/eureka/
           

然后在SpringCloudConfig.java里加个负载均衡配置@LoadBalanced:

微服务调用Ribbon

因为是和Eureka整合,而服务端跟消费端相对于注册中心来说都是client,所以要在启动类StudentConsumerApplication_80.java加个@EnableEurekaClient注解:

微服务调用Ribbon

然后修改下StudentConsumerController.java里的PRE_HOST变量,改成指定的微服务应用名称;当然要先在服务提供者microservice-student-provider-1001的application.yml加下配置,指定下应用名称:

微服务调用Ribbon

微服务的应用名称是microservice-student,所以把服务调用者这边的控制器里的PRE_HOST变量改成http://MICROSERVICE-STUDENT即可(MICROSERVICE-STUDENT为Eureka注册中心的应用名称,需大写):

微服务调用Ribbon

上面的都配置好后,就可以开始测试了;先启动两个Eureka,然后再启动服务提供者,再启动服务消费者:

微服务调用Ribbon

在浏览器的地址栏输入http://localhost/student/list,出现如下结果,说明配置OK:

微服务调用Ribbon

继续阅读