Spring Cloud 学习第二章:服务消费者restTemplate+ribbon
参考博客地址:https://blog.csdn.net/forezp/article/details/81040946
前言:上一章,学习了服务的注册与发现,微服务架构中,一般都会根据业务来拆分模块成一个独立的服务,Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。这篇文章学习下基于 ribbon+rest 来进行调用。
一、ribbon 简介
ribbon是一个负载均衡客户端,可以很好的控制 http 和 tcp 的一些行为。而Feign默认集成了ribbon。
ribbon 已经默认实现了下面这些配置bean:
IClientConfig ribbonClientConfig: DefaultClientConfigImpl
IRule ribbonRule: ZoneAvoidanceRule
IPing ribbonPing: NoOpPing
ServerList ribbonServerList: ConfigurationBasedServerList
ServerListFilter ribbonServerListFilter: ZonePreferenceServerListFilter
ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer
二、准备工作
1、继续使用上一章学习的工程,分别启动 eureka-server、eureka-client
再将 eureka-client 的配置文件的端口改为8763,并启动(由于我这边多次测试一个工程启动多个实例,始终存在些许问题,所以我这边增加了一个 eureka-client2 ,工程内容和 eureka-client 一样,只是将端口改为8763)
访问 http://localhost:8761/,你会发现多出来一个服务,这就相当于一个小集群了
三、创建一个服务消费者 eureka-ribbon
1、选择springboot 工程,勾选依赖
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.wxw</groupId>
<artifactId>springcloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.wxw</groupId>
<artifactId>eureka-ribbon</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-ribbon</name>
<description>Demo project for Spring Boot</description>
<!--ribbon 依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3、application.yml 配置文件如下,
指定服务注册中心:http://localhost:8761/eureka/
端口:8764 , 服务名:eureka-ribbon
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8764
spring:
application:
name: eureka-ribbon
4、springboot 启动类做如下更改
通过这两个注解向服务中心进行注册
@EnableEurekaClient
@EnableDiscoveryClient
同时注入 restTemplate bean,加入注解:@LoadBalanced
表示 restTemplate 开启负载均衡的功能
5、创建一个 service 测试类,
通过之前注入的 restTemplate 来消费 eureka-client 服务的 hello 接口方法,这里直接用服务名替代 url 地址,在 ribbon 中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名。
@Service
public class HelloService {
@Autowired
RestTemplate restTemplate;
public String hello(String name){
return restTemplate.getForObject("http://EUREKA-CLIENT/hello?name="+name,String.class);
}
}
6、创建一个 controller 测试类 调用 service 测试类
@RestController
public class HelloController {
@Autowired
HelloService helloService;
@RequestMapping("/hello")
public String hello(@RequestParam(value = "name",defaultValue = "wxw") String name){
return helloService.hello(name);
}
}
7、启动 eureka-ribbon 工程, 访问 http://localhost:8764/hello
一直点击刷新按钮,可以看到端口会 在8762 和 8763 之间来回切换
四、此时的整体架构
一个服务注册中心,eureka-server,端口为8761
eureka-client 和 eureka-client2 工程跑了两个实例,端口分别为8762,8763,分别向服务注册中心注册
sercvice-ribbon 端口为8764,向服务注册中心注册
当 eureka-ribbon 通过 restTemplate 调用 eureka-client 的 hello 接口时,因为用ribbon进行了负载均衡,会轮流的调用 eureka-client :8762和8763 两个端口的 hello 接口;
推荐阅读
-
spring cloud eureka服务搭建(生产者消费者)
-
SpringCloud学习笔记二:Spring Cloud Eureka 服务治理
-
spring cloud系列学习(SpringCloud之服务注册之Ribbon负载均衡)
-
简单的spring cloud微服务架构学习用DEMO
-
微服务解决方案 -- Spring Cloud Alibaba (三)服务消费者(Feign)
-
微服务解决方案 -- Spring Cloud Alibaba (八)Dubbo 服务消费者
-
微服务架构实战学习笔记 第五章 Spring Cloud Netflix Hystrix与服务容错
-
API网关服务Zuul-Spring Cloud学习第五天
-
第二章 Spring cloud 服务消费者
-
微服务架构实战学习笔记 第四章 Spring Cloud Netflix Ribbon与负载均衡