spring cloud學習(六)-Feign【超時時間設置】

open Feign能幹什麼?

open Feign的遵旨是使編寫Java HTTP客戶端變得更加容易

前面在使用RestTemplate + Ribbon時,利用Rest Template對HTTP請求的封裝處理,形成了一套模板化的調用方法,但是在實際開發中,由於對服務的調用可不止一處,往往一個接口會被多處調用,所以通常都會徵對每個微服務自行封裝一些客戶端類來包裝這些依賴服務的調用。所以open Feign在此基礎上作了進異步封裝,由他來幫助我們定義和實現依賴服務接口的定義。在open Feign的實現下,我們只需要創建一個接口並使用註解的方式來配置它(以前時Dao接口上標註@Mapper註解,現在是一個微服務接口上標註@FeignClient即可),即可完成對服務提供方的接口綁定,簡化了spring cloud Ribbon時,自動封裝服務調用客戶端的開發量。

open Feign集成了Ribbon

利用Ribbo維護了服務列表信息,並且通過輪詢實現了客戶端的負載均衡。而與Ribbon不同的是,通過open Feign只需要定義服務綁定接口且以聲明式的方法,優雅而簡單的實現了服務之間的調用。

open Feign超時?

默認open Feign客戶端只等待1秒鐘,但是服務端處理需要超過1秒鐘,直到open Feign客戶端不想等待。

新建cloud-order-feign80的model

  • 改pom.xml 添加
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
  • 寫application.yml文件 
server:
  port: 9001

eureka:
  client:
    register-with-eureka: false
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
#設置feign客戶端超時時間(openFeign默認支持Ribbon)
ribbon:
#  配置建立連接所用時間,使用與網絡狀態正常的情況下,兩端連接所用的時間
  ReadTimeout: 5000
#  配置連接後從服務器讀取到可用資源所用的時間
  ConnectTimeout: 5000

logging:
  level:
#    feign以什麼級別監控那個接口
    com.sumeng.springcloud.service.PaymentFeignService: debug
  • 修改主程序
@SpringBootApplication
@EnableFeignClients
public class OrderFeign9001 {
    public static void main(String[] args) {
        SpringApplication.run(OrderFeign9001.class,args);
    }
}
  • 新建service接口 其中 @FeignClient("服務名稱")
@Component
@FeignClient("CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {

    @GetMapping("/payment/list")
    public JsonResult list();

    @GetMapping("/payment/feign/timeout")
    public String paymentFeignTimeout();
}
  • 寫controller
@RestController
@Slf4j
public class PaymentController {

    @Resource
    private PaymentFeignService paymentFeignService;

    @GetMapping("/consumer/payment/list")
    public JsonResult getList(){
        return paymentFeignService.list();
    }

    @GetMapping("/consumer/payment/feign/timeout")
    public String getTimeout(){
        return paymentFeignService.paymentFeignTimeout();
    }
}
  • feign日誌配置
@Configuration
public class FeignLog {

    @Bean
    Logger.Level feignlog(){
        return Logger.Level.FULL;
    }
}

測試

總結

open Feign底層自帶Ribbon負載均衡

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章