Spring Cloud 的各微服务之间接口调用是RESTful的风格,而通常采用以下两种方式实现
I .RestTemplate
II .Feign
首先构建两个微服务用于互相调用
之前有人问到直接使用idea创建项目的方式,以下的项目构建流程
如图我已经构建了订单服务(order)和商品服务(product)
这些文件可以删掉。
模拟一个下单,获取商品详情的流程。
(一)RestTemplate 方式调用
首先我们在商品服务下建立一个简单的接口以供调用。
配置信息与eureka基本一致,我这边设置的端口配置为
prudoct 8091
order 8090
重启服务可以访问的到
然后在order端的代码如下
调用order服务的下单接口可以看到如下结果
这就是一个基本的服务之间的通信。
但是通过这种方式有它的缺点,首先你得知道目标服务的URL,其次,如果目标服务有多个实例,那么这种方式就更加不可取了。
(二)RestTemplate (升级版)方式调用
加入
@LoadBanlancd注解
这样便可以直接通过实例名代替URL进行访问
关于LoadBanlancd,它是Ribbon的一个组件
而Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,
说到客户端负载均衡,就不得不提一下负载均衡的策略
这里在Spring Cloud中,默认的负载均衡的策略是轮询的方式,可以构建俩个product实例
如果多次调用下单接口,它会轮询的调用这俩个实例完成商品查询的请求
一般来说,轮询就已经足够用了,Spring Cloud还是提供了改变策略的方式,我们可以通过查看官方文档来找到修改的方法
这里就是改变负载均衡策略的配置
(三)Feign
Feign是一种声明式REST客户端(伪RPC)不是真正的RPC调用,采用接口加注解的方式实现。
Feign主要是针对调用方
实现起来可以分为以下三步。
(1)POM文件添加依赖
因为我们是order(下单)调用product(查看商品)所以修改order的pom文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
(2)在启动类添加注解
@EnableFeignClients
(3)接口声明
在这里定义请求的URL以及要访问的目标服务,其中方法名可以自行定义。
然后就可以使用该接口,实现之前的下单查询商品详情请求。