SpringCloud Feign 服務(wù)調(diào)用的實現(xiàn)
前言
前面我們已經(jīng)實現(xiàn)了服務(wù)的注冊與發(fā)現(xiàn)(請戳:SpringCloud系列——Eureka 服務(wù)注冊與發(fā)現(xiàn)),并且在注冊中心注冊了一個服務(wù)myspringboot,本文記錄多個服務(wù)之間使用Feign調(diào)用。
Feign是一個聲明性web服務(wù)客戶端。它使編寫web服務(wù)客戶機(jī)變得更容易,本質(zhì)上就是一個http,內(nèi)部進(jìn)行了封裝而已。
GitHub地址:https://github.com/OpenFeign/feign
服務(wù)提供者
提供者除了要在注冊中心注冊之外,不需要引入其他東西,注意一下幾點(diǎn)即可:
1、如果使用對象接參,必須使用@RequestBody,否則接不到數(shù)據(jù)
2、接參只能出現(xiàn)一個復(fù)雜對象,例:public Result<List<UserVo>> list(@RequestBody UserVo entityVo) { ... }
3、提供者如果又要向其他消費(fèi)者提供服務(wù),又要向瀏覽器提供服務(wù),建議保持原先的Controller,新建一個專門給消費(fèi)者的Controller
測試接口
@RestController @RequestMapping("/user/") public class UserController { @Autowired private UserService userService; @RequestMapping("list") public Result<List<UserVo>> list(@RequestBody UserVo entityVo) { return userService.list(entityVo); } @RequestMapping("get/{id}") public Result<UserVo> get(@PathVariable("id") Integer id) { return userService.get(id); } }
服務(wù)消費(fèi)者
消費(fèi)者maven引入jar
<!-- feign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
配置文件
對日期的解析,消費(fèi)者要跟提供者一致,不然會報json解析錯誤
#超時時間 feign.httpclient.connection-timeout=30000 #mvc接收參數(shù)時對日期進(jìn)行格式化 spring.mvc.date-format=yyyy-MM-dd HH:mm:ss #jackson對響應(yīng)回去的日期參數(shù)進(jìn)行格式化 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8
服務(wù)調(diào)用
1、springdatejpa 應(yīng)用名稱,是服務(wù)提供者在eureka注冊的名字,F(xiàn)eign會從注冊中心獲取實例
2、如果不想啟動eureka服務(wù),直連本地開發(fā):@FeignClient(name = "springdatejpa", path = "/user/",url = "http://localhost:10086")
3、如果使用@RequestMapping,最好指定調(diào)用方式
4、消費(fèi)者的返回值必須與提供者的返回值一致,參數(shù)對象也要一致
更多@FeignClient注解參數(shù)配置,請參閱官方文檔
@FeignClient(name = "springdatejpa", path = "/user/") public interface MyspringbootFeign { @RequestMapping(value = "get/{id}") Result<UserVo> get(@PathVariable("id") Integer id); @RequestMapping(value = "list", method = RequestMethod.GET) Result<List<UserVo>> list(@RequestBody UserVo entityVo); }
/** * feign調(diào)用 */ @GetMapping("feign/get/{id}") Result<UserVo> get(@PathVariable("id") Integer id){ return myspringbootFeign.get(id); } /** * feign調(diào)用 */ @GetMapping("feign/list") Result<List<UserVo>> list(UserVo userVo){ return myspringbootFeign.list(userVo); }
啟動類
啟動類加入注解:@EnableFeignClients
@EnableEurekaClient @EnableFeignClients @SpringBootApplication public class MyspringbootApplication{ public static void main(String[] args) { SpringApplication.run(MyspringbootApplication.class, args); } }
效果
成功注冊兩個服務(wù)
成功調(diào)用
報錯記錄
1、啟動時報了個SQL錯誤
解決:配置文件連接數(shù)據(jù)時指定serverTimezone=GMT%2B8
2、當(dāng)我將之前搭好的一個springboot-springdata-jpa整合項目在eureka注冊時出現(xiàn)了一個報錯
然后在網(wǎng)上查了下說是因為springboot版本問題,之前這個項目用的是2.0.1.RELEASE,現(xiàn)在要在eureka注冊,pom引入了就出現(xiàn)了上面的報錯
<!-- eureka-client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- actuator --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories>
解決:升級了springboot版本,2.1.0,項目正常啟動
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.0.RELEASE</version> <!--<version>2.0.1.RELEASE</version>--> <relativePath/> <!-- lookup parent from repository --> </parent>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- springcloud使用feign調(diào)用服務(wù)時參數(shù)內(nèi)容過大問題
- springcloud?feign服務(wù)之間調(diào)用,date類型轉(zhuǎn)換錯誤的問題
- SpringCloud中的Feign遠(yuǎn)程調(diào)用接口傳參失敗問題
- springcloud本地調(diào)試feign調(diào)用出現(xiàn)的詭異404問題及解決
- SpringCloud 服務(wù)負(fù)載均衡和調(diào)用 Ribbon、OpenFeign的方法
- SpringCloud使用Feign實現(xiàn)服務(wù)調(diào)用
- SpringCloud服務(wù)之間Feign調(diào)用不會帶上請求頭header的解決方法
相關(guān)文章
詳解Spring Boot使用系統(tǒng)參數(shù)表提升系統(tǒng)的靈活性
Spring Boot項目中常有一些相對穩(wěn)定的參數(shù)設(shè)置項,其作用范圍是系統(tǒng)級的或模塊級的,這些參數(shù)稱為系統(tǒng)參數(shù)。這些變量以參數(shù)形式進(jìn)行配置,從而提高變動和擴(kuò)展的靈活性,保持代碼的穩(wěn)定性2021-06-06java地理坐標(biāo)系及投影間轉(zhuǎn)換代碼示例
在地圖投影中,經(jīng)常需要將坐標(biāo)從不同的坐標(biāo)系之間進(jìn)行轉(zhuǎn)換,下面這篇文章主要給大家介紹了關(guān)于java地理坐標(biāo)系及投影間轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2024-08-08PostMan如何傳參給@RequestBody(接受前端參數(shù))
這篇文章主要介紹了PostMan如何傳參給@RequestBody(接受前端參數(shù)),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10java多線程抓取鈴聲多多官網(wǎng)的鈴聲數(shù)據(jù)
很容易就能發(fā)現(xiàn)通過改變 listId和page就能從服務(wù)器獲取鈴聲的json數(shù)據(jù), 通過解析json數(shù)據(jù), 可以看到都帶有{"hasmore":1,"curpage":1}這樣子的指示,通過判斷hasmore的值,決定是否進(jìn)行下一頁的抓取。 但是通過上面這個鏈接返回的json中不帶有鈴聲的下載地址2016-04-04使用Postman傳遞arraylist數(shù)據(jù)給springboot方式
這篇文章主要介紹了使用Postman傳遞arraylist數(shù)據(jù)給springboot方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12