SpringCloud實戰項目全套學習教程連載中
PassJava 學習教程
簡介
- PassJava-Learning項目是PassJava(佳必過)項目的學習教程。對架構、業務、技術要點進行講解。
- PassJava 是一款Java
面試刷題
的開源系統,可以用零碎時間利用小程序查看常見面試題,夯實Java基礎。 - PassJava 項目可以教會你如何搭建SpringBoot項目,Spring Cloud項目
- 採用流行的技術,如 SpringBoot、MyBatis、Redis、 MySql、 MongoDB、 RabbitMQ、Elasticsearch,採用Docker容器化部署。
更好的閱讀體驗
文檔連載目錄
- 打造一款 刷Java 知識的小程序
- 打造一款 刷Java 知識的小程序(二)
- 01.五分鐘搞懂分佈式基礎概念
- 02.快速搭建Linux環境-運維必備
- 03.配置虛擬機網絡
- 04.安裝Docker
- 05.Docker安裝mysql
- 06.Docker安裝redis
- 07.本地開發環境配置
- 08.配置Git
- 09.初始化項目和添加微服務
- 10.PassJava-微服務劃分圖
- 11.初始化數據庫和表
- 12.搭建管理後臺
- 13.自動生成前後端代碼
- 14.整合MyBatis-Plus實現CRUD
- 15.生成所有微服務的CRUD代碼
- 16.Spring Cloud Alibaba 組件簡介
- 17.SpringCloud整合Alibaba-Nacos組件
- 18.SpringCloud整合OpenFeign組件
Spring Cloud 整合 OpenFeign實現聲明式遠程調用
1.Feign 概述
- Feign聲明式客的HTTP客戶端,讓遠程調用更簡單。
- 提供了HTTP請求的模板,編寫簡單的接口和插入註解,就可以定義好HTTP請求的參數、格式、地址等信息
- 整合了Ribbon(負載均衡組件)和Hystix(服務熔斷組件),不需要顯示使用這兩個組件
- Spring Cloud Feign 在Netflix Feign的基礎上擴展了對SpringMVC註解的支持
2. 遠程調用示例
示例:查詢用戶的學習時長
用戶微服務passjava-member調用學習微服務passjava-study的方法
1.引入openfeign依賴
passjava-member和passjava-study項目的pom文件引入openfeign依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.StudyTimeController定義遠程調用測試方法
返回某個用戶學習題目的總時長
@RequestMapping("/member/list/test")
public R memberStudyTimeTest() {
StudyTimeEntity studyTimeEntity = new StudyTimeEntity();
studyTimeEntity.setTotalTime(100); // 學習時長:100分鐘
studyTimeEntity.setQuesTypeId(1L); // 題目類型:1 (javaBasic)
return R.ok().put("studyTime", Arrays.asList(studyTimeEntity));
}
3.member目錄下創建feign service
-
創建package: com.jackson0714.passjava.member.feign
-
創建StudyTimeFeignService接口
-
添加註解
@FeignClient
。顯示聲明這個接口用來遠程調用study
服務。@FeignClient("passjava-study") public interface StudyTimeFeignService {}
-
添加遠程調用方法
public R memberStudyTime();
-
給方法添加要遠程調用的方法的路徑
study/studytime/member/list/test
@RequestMapping("study/studytime/member/list/test") public R getMemberStudyTimeListTest();
-
添加註解
@EnableFeignClients
開啓遠程調用服務。給類PassjavaStudyApplication.java添加註解
@EnableFeignClients
。basePackages代表自動掃碼指定路徑下所有帶有@FeignClient註解的接口。
@EnableFeignClients(basePackages = "com.jackson0714.passjava.member.feign") @EnableDiscoveryClient @MapperScan("com.jackson0714.passjava.member.dao") @SpringBootApplication public class PassjavaMemberApplication { public static void main(String[] args) { SpringApplication.run(PassjavaMemberApplication.class, args); } }
-
測試接口
-
啓動passjava-member和passjava-study服務
-
用postman工具或瀏覽器輸入請求地址
-
返回結果如下圖
studytime和member都有數據,學習時長:100分鐘,暱稱:悟空聊架構
-
4.測試OpenFeign傳參
示例:用戶id作爲參數在服務間傳遞
MemberController
@RequestMapping("/studytime/list/test/{id}")
public R getMemberStudyTimeListTest(@PathVariable("id") Long id) {
//mock數據庫查到的會員信息
MemberEntity memberEntity = new MemberEntity();
memberEntity.setId(id); // 學習時長:100分鐘
memberEntity.setNickname("悟空聊架構");
//遠程調用拿到該用戶的學習時長(學習時長是mock數據)
R memberStudyTimeList = studyTimeFeignService.getMemberStudyTimeListTest(id);
return R.ok().put("member", memberEntity).put("studytime", memberStudyTimeList.get("studytime"));
}
StudyTimeFeignService
@FeignClient("passjava-study")
public interface StudyTimeFeignService {
@RequestMapping("study/studytime/member/list/test/{id}")
public R getMemberStudyTimeListTest(@PathVariable("id") Long id);
}
StudyTimeController
@RequestMapping("/member/list/test/{id}")
public R memberStudyTimeTest(@PathVariable("id") Long id) {
StudyTimeEntity studyTimeEntity = new StudyTimeEntity();
studyTimeEntity.setTotalTime(100); // 學習時長:100分鐘
studyTimeEntity.setQuesTypeId(1L); // 題目類型:1 (javaBasic)
return R.ok().put("studytime", Arrays.asList(studyTimeEntity));
}
3.總結FeignClient使用方法
- 引入OpenFeign依賴
- 定義FeignClient接口類(註解
@FeignClient
),聲明這個接口類是用來遠程調用其他服務的 - 接口類中定義要遠程調用的接口方法,指定遠程服務方法的路徑
- Controller類中調用接口方法
- 開啓遠程調用(註解
@EnableFeignClients
)
代碼地址
https://github.com/Jackson0714/PassJava-Platform