前言
上篇文章中,簡單介紹了如何在SpringCloud項目中接入Nacos做爲註冊中心
,其中服務消費者是經過RestTemplate+Ribbon的方式來進行服務調用的。html
實際上在平常項目中服務間調用大都用的是OpenFeign
, OpenFeign自身整合了Ribbon和Hystrix,爲服務調用提供了更優雅的方式java
那麼接入了Nacos以後,服務調用還能用這一套嗎?git
經過我在公司項目上的試水,這個大膽的設想是徹底沒問題的github
本文在上一篇文章中的項目工程基礎上,進行測試和演示,文章地址:在SpringCloud項目中接入Nacos做爲註冊中心spring
<!-- more -->apache
建立項目
打開以前建立的工程Nacos,目前已經有兩個子工程:瀏覽器
- nacos-provide:服務提供者
- nacos-consumer:服務消費者(RestTemplate+Ribbon服務調用)
一樣的操做,在Nacos項目下繼續建立一個Springboot項目名爲nacos-feign,建立時添加OpenFeign的依賴,如圖:app
nacos-fegin的pom.xml文件以下:負載均衡
<?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> <artifactId>Nacos</artifactId> <groupId>com.study.www</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.larscheng.www</groupId> <artifactId>nacos-fegin</artifactId> <version>0.0.1-SNAPSHOT</version> <name>nacos-fegin</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
定義遠程接口
建立RemoteClient接口,來定義OpenFeign要調用的遠程服務接口。maven
同時經過@FeginClient註解指定被調用方的服務名,經過fallback屬性指定RemoteHystrix類,來進行遠程調用的熔斷和降級處理。
RemoteClient.java代碼以下
@FeignClient(name = "nacos-provide",fallback = RemoteHystrix.class) public interface RemoteClient { @GetMapping("/helloNacos") String helloNacos(); }
RemoteHystrix.java代碼以下
@Component public class RemoteHystrix implements RemoteClient { @Override public String helloNacos() { return "請求超時了"; } }
經過OpenFeign調用遠程服務
在啓動類NacosFeignApplication.java中添加註解@EnableDiscoveryClient開啓服務註冊、添加註解@EnableFeignClients開啓OpenFeign,啓動類經過OpenFeign調用服務代碼以下
@SpringBootApplication @RestController @EnableDiscoveryClient @EnableFeignClients public class NacosFeignApplication { public static void main(String[] args) { SpringApplication.run(NacosFeginApplication.class, args); } @Autowired private RemoteClient remoteClient; @GetMapping("/feign") public String test() { return remoteClient.helloNacos(); } }
添加項目配置文件
在resourse目錄下,添加application.yml配置
server: port: 9529 spring: application: name: nacos-feign cloud: nacos: discovery: server-addr: 127.0.0.1:8848
啓動測試
- 啓動Nacos-server
- 啓動項目nacos-provide
- 啓動項目nacos-feign
完成以上三步後,訪問Nacos控制檯,檢查服務註冊狀況,若是啓動都成功,你看到的應該是以下圖:
瀏覽器訪問 http://127.0.0.1:9529/feign, 能夠看到返回結果與RestTemplate結果無異,但對於編碼和操做方式都更加優雅。
訪問nacos-feign的接口 http://127.0.0.1:9529/feign, 能夠經過OpenFeign遠程調用nacos-provide的接口,返回結果:
你好,nacos!
總結
OpenFegin整合Ribbon和Hystrix,爲微服務中遠程調用提供了一種更優雅的調用方式,它支持負載均衡和容錯熔斷機制。經過上面的例子,在SpringCloud中接入Nacos作註冊中心後,並不會影響咱們繼續使用其餘SpringCloud組件。
本文源碼:https://github.com/larscheng/larscheng-learning-demo/tree/master/Nacos
原文出處:https://www.cnblogs.com/larscheng/p/11388820.html