天天看點

Spring Cloud OpenFeign基本使用

Spring Cloud OpenFeign是什麼

Ribbon + RestTemplate

Ribbon + RestTemplate是一套RESTful風格的Http服務用戶端,兩者結合可以實作服務調用和負載均衡,在實際開發中,由于對服務依賴的調用可能不止一處,往往一個服務接口會被多次調用,為了避免直接在控制層内直接使用 RestTemplate遠端調用,通常都會針對每個微服務自行封裝一些用戶端類來包裝對這些依賴服務的調用(一個微服務的調用封裝到一個業務層的接口中,在業務層中使用 RestTemplate遠端調用,并實作負載均衡)。

Feign是什麼

Feign是Spring Cloud元件中一個聲明式WebService用戶端,旨在使編寫Java Http用戶端變得更加容易。其内置了Ribbon,是對Ribbon + RestTemplate的進一步封裝,由它來幫我們定義和實作依賴服務接口,我們隻需要建立一個業務層接口并使用注解的方式來配置它(我們不需要再像上面一樣手動實作封裝的接口,包括調用和負載均衡處理,這些工作Feign會掃描注解并通過動态代理的方式産生實作類,實作類中已經幫我們把這些事情都做好了),即可完成對服務提供方的接口綁定(一個業務層類綁定一個微服務)。

OpenFeign簡述

OpenFeign是Spring Cloud在Feign的基礎上支援了Spring MVC的注解,如@RequestMapping等, OpenFeign的@FeignClient可以解析Spring MVC的注解。

OpenFeign簡單使用示範

pom.xml

<dependencies>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-openfeign</artifactId>
	</dependency>
	......
</dependencies>
           

application.yaml

server:
  port: 80
spring:
  application:
    name: cloud-openfeign-order
eureka:
  client:
    register-with-eureka: false
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka #采用Eureka作為服務注冊中心,這裡是服務注冊中心的位址
           

啟動類

@SpringBootApplication
@EnableEurekaClient //開啟EurekaClient用戶端
@EnableFeignClients //開啟FeignClients
public class ApplicationContextMain80 {

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

業務類

定義業務接口綁定遠端微服務調用

@Component
@FeignClient("CLOUD-PAYMENT") //@FeignClient注解表明該接口是一個調用服務的接口,綁定一個遠端微服務,CLOUD-PAYMENT是微服務名稱
public interface PaymentService {//接口名随意取
    @GetMapping("/payment/{id}")//該方法對應CLOUD-PAYMENT微服務裡的一個接口,該方法方法名随意取,但參數和傳回值必須和要調用的遠端接口一緻
    public CommonResult<Payment> getPaymentById(@PathVariable("id") int id);
}
           

控制層直接調用業務接口

@RestController
public class OrderController {

    @Autowired
    PaymentService paymentService;

    @GetMapping("/order/openfeign/payment/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") int id){
        return  paymentService.getPaymentById(id);
    }
}
           

OpenFeign配置連接配接時間和請求資源的時間

feign:
  client:
    config:
      default:
        ConnectTimeOut: 5000 #允許的最長連接配接時間,秒為機關
        ReadTimeOut: 5000 #允許的最長請求資源時間
           

OpenFeign配置日志

顯示Http調用的資訊,包括請求資訊和響應資訊

需要兩步:1.配置日志顯示内容 2.配置日志顯示級别

配置日志顯示内容

有四種顯示内容

顯示内容 說明
NONE 預設,不顯示任何日志
BASIC 僅記錄請求方法、URL、響應狀态碼以及執行時間
HEADERS 除了BASIC中定義的資訊外,還有請求和響應的頭資訊
FULL 除了HEADERS中定義的資訊外,還有請求和響應的正文及中繼資料
@Configuration
public class LoggerConfig {
    @Bean
    public Logger.Level loggerLevel(){
        return Logger.Level.FULL;
    }
}

           

配置日志顯示級别

logging:
  level:
    com.fl.demo.service.PaymentService: debug #被@FeignClient注解的業務接口全類名: 日志顯示級别,定制該業務接口特定的顯示級别
           

繼續閱讀