微服务调用Ribbon
简介
前面讲了eureka服务注册与发现,但是结合eureka集群的服务调用没讲。
这里的话 就要用到Ribbon,结合eureka,来实现服务的调用;
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。
在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。展示了Ribbon与Eureka配合使用时的架构。
初步应用
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
server: port: 8080 context-path: / eureka: client: service-url: defaultZone: http://eureka2001.huang.com:2001/eureka/,http://eureka2002.huang.com:2002/eureka/,http://eureka2003.huang.com:2003/eureka/ register-with-eureka: false
ribbon结合eureka来调用服务提供者;
SpringCloudConfig也改成 要加个负载均衡配置 @LoadBalanced
package com.huang.microservicestudentconsumer80.config; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class SpringCloudConfig { @LoadBalanced @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
因为和eureka整合,所以启动类StudentConsumerApplication_80 加个注解 @EnableEurekaClient
这里还有一个,要修改下StudentConsumerController的PRE_HOST,改成指定的微服务应用名称;
当然这里要先在服务提供者microservice-student-provider-1001的application.yml加下配置,指定下应用名称:
application:
name: microservice-student
我们的微服务应用名称是 microservice-student
所以服务调用者这边的控制器里PRE_HOST改成 http://MICROSERVICE-STUDENT即可;
MICROSERVICE-STUDENT为Eureka注册中心的应用名称
@RestController @RequestMapping("/student") public class StudentConsumerController { // private final static String SERVER_IP_PORT = "http://localhost:1001"; private final static String SERVER_IP_PORT = "http://MICROSERVICE-STUDENT";
上面配置好后,我们可以测试下;
先启动三个eureka,然后再启动服务提供者,再启动服务消费者;
结果就出来了,说明配置OK;
Ribbon负载均衡
按照它microservice-student-provider-1001建立一个microservice-student-provider子项目,然后将microservice-student-provider-1001这个子项目干掉;
前面搭建了初步例子,但是还没实现真正负载均衡,我们这里要先搞三个服务提供者集群,然后才能演示负载均衡,以及负载均衡策略;
新建项目microservice-student-provider-1002,microservice-student-provider-1003
pom.xml,application.yml,以及java类都复制一份,启动类名称对应的改下;
yml配置文件有两处要对应的改下,port端口改下,以及服务实例名称改下;