SpringCloud Feign 服務調用的實現

Feign是一個聲明性web服務客戶端。本文記錄多個服務之間使用Feign調用,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧


SpringCloud Feign 服務調用的實現

前言

前面我們已經實現了服務的註冊與發現(請戳:SpringCloud系列——Eureka 服務註冊與發現),並且在註冊中心註冊了一個服務myspringboot,本文記錄多個服務之間使用Feign調用。

Feign是一個聲明性web服務客戶端。它使編寫web服務客戶機變得更容易,本質上就是一個http,內部進行了封裝而已。

服務提供者

提供者除了要在註冊中心註冊之外,不需要引入其他東西,注意一下幾點即可:

1、如果使用對象接參,必須使用@RequestBody,否則接不到數據

2、接參只能出現一個複雜對象,例:public Result<list>> list(@RequestBody UserVo entityVo) { ... }/<list>

3、提供者如果又要向其他消費者提供服務,又要向瀏覽器提供服務,建議保持原先的Controller,新建一個專門給消費者的Controller

測試接口

<code>@RestController
@RequestMapping("/user/")

public class UserController {

@Autowired
private UserService userService;
@RequestMapping("list")
public Result<list>> list(@RequestBody UserVo entityVo) {
return userService.list(entityVo);
}

@RequestMapping("get/{id}")
public Result<uservo> get(@PathVariable("id") Integer id) {
return userService.get(id);
}
}/<uservo>/<list>/<code>

服務消費者

消費者maven引入jar

<code>
<dependency>
<groupid>org.springframework.cloud/<groupid>
<artifactid>spring-cloud-starter-openfeign/<artifactid>
/<dependency>/<code>

配置文件

對日期的解析,消費者要跟提供者一致,不然會報json解析錯誤

<code>#超時時間
feign.httpclient.connection-timeout=30000

#mvc接收參數時對日期進行格式化
spring.mvc.date-format=yyyy-MM-dd HH:mm:ss
#jackson對響應回去的日期參數進行格式化
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8/<code>

服務調用

1、springdatejpa 應用名稱,是服務提供者在eureka註冊的名字,Feign會從註冊中心獲取實例

2、如果不想啟動eureka服務,直連本地開發:@FeignClient(name = "springdatejpa", path = "/user/",url = "http://localhost:10086")

3、如果使用@RequestMapping,最好指定調用方式

4、消費者的返回值必須與提供者的返回值一致,參數對象也要一致

<code>@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>> list(@RequestBody UserVo entityVo);
}/<list>/<uservo>/<code>
<code>/**
* feign調用
*/
@GetMapping("feign/get/{id}")
Result<uservo> get(@PathVariable("id") Integer id){
return myspringbootFeign.get(id);
}


/**
* feign調用
*/
@GetMapping("feign/list")
Result<list>> list(UserVo userVo){
return myspringbootFeign.list(userVo);
}/<list>/<uservo>/<code>

啟動類

啟動類加入註解:@EnableFeignClients

<code>@EnableEurekaClient 

@EnableFeignClients
@SpringBootApplication
public class MyspringbootApplication{

public static void main(String[] args) {
SpringApplication.run(MyspringbootApplication.class, args);
}

}/<code>

效果

成功註冊兩個服務

SpringCloud Feign 服務調用的實現

成功調用

SpringCloud Feign 服務調用的實現

報錯記錄

1、啟動時報了個SQL錯誤

SpringCloud Feign 服務調用的實現

解決:配置文件連接數據時指定serverTimezone=GMT%2B8

SpringCloud Feign 服務調用的實現

2、當我將之前搭好的一個springboot-springdata-jpa整合項目在eureka註冊時出現了一個報錯

SpringCloud Feign 服務調用的實現

然後在網上查了下說是因為springboot版本問題,之前這個項目用的是2.0.1.RELEASE,現在要在eureka註冊,pom引入了就出現了上面的報錯

<code>
<dependency>
<groupid>org.springframework.cloud/<groupid>
<artifactid>spring-cloud-starter-netflix-eureka-client/<artifactid>
/<dependency>


<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-actuator/<artifactid>
/<dependency>/<code>
<code><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>
spring-milestones
<name>Spring Milestones/<name>
https://repo.spring.io/milestone
/<repository>
/<repositories>/<code>

解決:升級了springboot版本,2.1.0,項目正常啟動

<code><parent> 

<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-parent/<artifactid>
<version>2.1.0.RELEASE/<version>

<relativepath>
/<parent>
<parent>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-parent/<artifactid>
<version>2.1.0.RELEASE/<version>

<relativepath>
/<parent>
/<code>

以上就是本文的全部內容,希望對大家的學習有所幫助,喜歡的可以關注小編並幫小編轉發哦。


分享到:


相關文章: