微服务-4 微服务之间调用Feign与Ribbon

微服务之间调用Feign与Ribbon
首先我们先了解一下微服务中一共有几种调用方式,从更深层次解析这个问题是有很多种方式的,例如我们可以自定义很多种调用协议,事在人为,不过我们今天了解的是一些主流的协议,
RPC,HTTP,对接之间消息同步,几种常见的微服务调用方式ribbon+restTemplate,Dubbo,Feign
 
RPC调用简介:
RPC—Remote Produce Call(远程过程调用),主要是通过自定义通信规则,自定义数据格式来实现通信。其实这要求通信两端都需要统一通信规则,必须约定好数据传输格式。就好比两个人聊天,要约定好聊天的语言,否则无法沟通。所以,我们必须定义好请求和响应的格式。另外,数据在网路中传输需要进行序列化,所以还需要约定统一的序列化的方式。
这种通信形式可以降低通信过程中的交互数据传输内容大小,从而提高通信数据传输效率。而现有的RPC框架一般是基于原生TCP协议通信。早期的webservice,现在热门的dubbo,都是RPC的典型。
 
HTTP调用简介:
HTTP本身就是一种网络传输协议,也叫超文本传输协议,同样基于TCP,但是在这之上做了修改,规定了网络传输的请求格式、响应格式、资源定位和操作的方式等。现在客户端浏览器与服务端通信基本都是采用Http协议。当然也可以用来进行远程服务调用。现在热门的Rest风格,就可以通过http协议来实现。但是他的传输报文,基于统一的规定那个,覆盖面大,但是往往在实际使用中有一部分是通信所暂未使用的,这就导致消息臃肿。
 
废话不多说了,我们直接说主角吧 Feign
Feign调用简介:
feign是一个声明的REST客户端,他的目的是让REST调用更加简单    ,Feign提供了http的请求模板,通过编写简单的接口和注解,就可以定义好 标准的HTTP请求 参数 地址,Feign完全代替了并且代理了HTTP请求 并且在微服务调用中Feign还会帮助你封装并转化成JavaBean 这对于我们开发人员来说 是超级省事的,Feign里面还默认包含了Ribbon 服务之间的负载均衡,接下来我们开始学习Feign
我们在使用 nacos作为我们的注册中心与配置中心的基础上开始演示,
第一步 创建两个WEB工程项目   nacos-xxxx1.2,nacos-yyyy1.2,其中nacos-xxxx1.2项目的服务名称是nacos-yyyy1.2项目的服务名称是nacos-yyyy ,我们分别给两个工程项目增加 nacos 的注册中心与配置中心的Maven包,还有Feign包 如下:
 
<!--注册中心-->
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
   <version>2.2.1.RELEASE</version>
</dependency>
<!--配置中心-->
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
   <version>2.2.1.RELEASE</version>
</dependency>
<!--feign 调用 包含了ribbon-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-openfeign</artifactId>
   <version>2.1.2.RELEASE</version>
</dependency>
 
第二步来我们分别给两个项目的启动类 增加注解@EnableFeignClients表示开启Feign调用,
第三步我们创建调用演示类  我们用 nacos-xxxx1.2项目调用nacos-yyyy1.2 项目,
3.1编写服务的提供者,nacos-yyyy1.2 创建提供者Controller 如下图:
3.2创建调用者服务nacos-xxxx1.2 创建Feign客户端调用类并配置 如下图:
其中@FeignClient 注解里面的value 是nacos-yyyy1.2服务里面properties配置的服务名称
3.2附上 两个服务的配置文件
nacos-xxxx1.2配置:
nacos-yyyy1.2配置:
3.3我们启动nacos-xxxx1.2项目 端口是8080   启动 nacos-yyyy1.2项目端口是8081,启动完毕后 看下nacos里面是否存在两个服务,可以看到如下图:服务存在
 
3.4编写在nacos-xxxx1.2项目中调用nacos-yyyy1.2项目的业务场景
调用结果展示如下图:
4 接下来我们测试一下Feign默认开启的Ribbon 服务之间调用的负载均衡
我们copy了一下nacos-yyyy1.2 项目 起名为nacos-yyyy1.3 一个端口是8081 一个端口是8082 需要注意的是 只有两个项目的应用服务名称一样 nacos才能知道这是一个服务的集群 nacos-yyyy1.2和nacos-yyyy1.3项目的服务名称都是nacos-yyyy
4.1修改nacos-yyyy1.3项目的端口为8083
4.2修改nacos-yyyy1.3提供者Controller里面的内容
4.3启动服务 查看是否被nacos所管理:如下图
可以看到,我们的nacos-yyyy服务已经被nacos所管理成集群 这时候我们用nacos-xxxx服务的Feign调用nacos-yyyy服务:我们多请求几次看看是否可以实现Ribbon的负载均衡
请求第一次
请求第二次
 
结果是Feign默认集成了Ribbon,并且可以实现负载均衡,默认策略是轮询
 
posted @ 2022-02-16 15:09  郎小乐  阅读(346)  评论(0)    收藏  举报