文章目录
系列文章列表:
一、前言
本文在Nacos的简单理解与其作为注册中心的基本应用一文的基础上演示。在之前的案例中,服务间是通过RestTemplate
+Ribbon
的方式来进行调用的。然而在实际开发中服务间调用多数采用OpenFeign
, 其自身整合了Ribbon
和Hystrix
,为服务调用提供了更加优雅,更加便捷的方式。
当在IDEA中引入spring-cloud-starter-openfeign
的Maven
坐标,通过依赖管理,会发现其包含了Ribbon
和Hystrix
。
二、环境准备
Windows7
JDK: 8
Maven:3.6.1
SpringCloud:Hoxton.SR4
SpringBoot:2.2.2.RELEASE
spring-cloud-alibaba-dependencies:2.1.0.RELEASE
Nacos-server:1.3.2
三、工程构建
1.工程目录
本文关注三个模块,server-consumer
和server-provider
是已有的。common-api-openfeign
是待建的。
本文的演示逻辑:
- 将
nacos-provide
和nacos-consumer
注册到Nacos-server
; server-consumer
通过openfeign
组件调用server-provider
的服务;
2.环境构建
(1)、服务提供方server-provider
构建
- 新建一个
WarehouseController
-
代码如下:
@RestController @RequestMapping("/warehouse") public class WarehouseController { @GetMapping("/hello") public String hello(){ return "success" } }
(2)、新建commons-api-comons
模块
- 此模块用于构建远程调用接口映射,如有模块需要调用其它模块的服务,应引入此模块的Maven坐标。
- 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springcloud.alibaba</groupId>
<artifactId>cloud-alibaba</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>commons-api-openfeign</artifactId>
<!--打包方式-->
<packaging>jar</packaging>
<dependencies>
<dependency>
<!--父POM中锁定了版本信息,只需引入G,A即可 -->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
</project>
- 创建
WarehouseClient
接口,声明server-provider
中的接口映射
-
WarehouseClient
接口代码如下:/** * 通过@FeginClient注解指定被调用方的服务名,就是在Nacos-server服务列表中的服务名 * 通过fallback属性指定RemoteHystrix类,来进行远程调用的熔断和降级处理。 */ @Component @FeignClient(value = "SERVER-PROVIDER",fallback = RemoteHystrix.class) // public interface WarehouseClient { //这里的访问路径是原接口的相对访问路径 @GetMapping("/warehouse/hello") String hello(); }
-
创建
RemoteHystrix
,处理远程调用的熔断和降级,代码如下:@Component public class RemoteHystrix implements WarehouseClient { @Override public String hello() { return "服务器繁忙,请稍后访问"; } }
(3)、服务消费方server-consumer
前提准备
-
在服务调用方
server-consumer
的启动类上开启远程调用功能,添加@EnableFeignClients
注解即可@EnableFeignClients @EnableDiscoveryClient @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
-
通过IDEA Maven插件,将
common-api-openfeign
模块install
到本地仓库,直接单击install
即可
-
最后在服务调用方
server-consumer
工程中引入common-api-openfeign
的坐标<dependency> <groupId>org.springcloud.alibaba</groupId> <artifactId>commons-api-openfeign</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
-
新建一个
OrderController
,代码如下:@RestController @RequestMapping("/order") public class OrderController { @Autowired private WarehouseClient warehouseClient; @GetMapping("/hello") public String hello(){ return warehouseClient.hello(); } }
四、测试
-
已安装
Nacos-server
,并成功启动; -
启动
server-consumer
,server-provider
工程,端口分别为9001
,9002
;
-
调用http://localhost:9001/order/hello