Feign:一個聲明式的REST客戶端,它能讓REST調用更加簡單。
Spring cloud集成Feign
- 搭建Spring cloud的基本環境
參考:https://blog.csdn.net/admin_15082037343/article/details/106959438
- 在demo-client中添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 啓動類添加註解@EnableFeignClients
package com.demo.client;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
}
- 新增接口UserClient
package com.demo.client.api;
import com.demo.client.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
@FeignClient(value = "demo-provider", path = "/user")
public interface UserClient {
@GetMapping
Object findUser(@RequestParam("pageNo") Integer pageNo, @RequestParam("size") Integer size);
@PostMapping
User save(@RequestBody User user);
@GetMapping("/{id}")
User findById(@PathVariable("id") String id);
@DeleteMapping("/{id}")
String deleteById(@PathVariable("id") String id);
}
findUser()方法返回Object在這裏只是爲了方便,可以自己封裝實體類。
@FeignClient:value代表訪問的應用,path:請求路徑的統一前綴。
- UserController更新如下
package com.demo.client.controller;
import com.demo.client.api.UserClient;
import com.demo.client.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserClient userClient;
@GetMapping
public Object findUser(@RequestParam(required = false, defaultValue = "1") Integer pageNo
, @RequestParam(required = false, defaultValue = "10") Integer size) {
return userClient.findUser(pageNo, size);
}
@RequestMapping(method = { RequestMethod.POST, RequestMethod.PUT })
public User save(@RequestBody User user) {
return userClient.save(user);
}
@GetMapping("/{id}")
public User findById(@PathVariable String id) {
return userClient.findById(id);
}
@DeleteMapping("/{id}")
public String deleteById(@PathVariable String id) {
userClient.deleteById(id);
return id;
}
}
在這裏就不使用RestTemplate對象去調用接口了,而是使用UserClient替換,替換之後代碼更簡單了。
左邊爲使用RestTemplate調用接口,右邊爲Feign調用接口。
Feign日誌配置
- 新建類FeignConfiguration
package com.demo.client.conf;
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FeignConfiguration {
@Bean
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
- UserClient 的 @FeignClient註解指定
@FeignClient(value = "demo-provider", path = "/user", configuration = FeignConfiguration.class)
- application.yml配置
logging:
level:
com:
demo:
client:
api:
UserClient: debug
此時訪問接口發現控制檯打印日誌如下