天天看點

Springcloud的服務調用---OpenFeign

目錄:
1.OpenFeign
	1.1建立feign子產品
	1.2逾時控制
	1.3日志列印
           

一,簡單介紹一下服務調用

服務調用,指的是注冊到服務端上的用戶端之間資料的互相調用問題。

 spring-cloud調用服務有兩種方式,一種是	Ribbon+RestTemplate, 另外一種是Feign。
 
服務降級,指的是當伺服器壓力劇增時,根據目前業務情況及流量對一些服務和頁面有政策的降級,
以此釋放伺服器資源以保證核心任務的正常運作。
           

二,OpenFeign

1.建立feign子產品

首先,建立一個消費者募子產品.feign自帶負載均衡配置,是以不用手動配置.

然後,建立cloud-consumer-feign-order80

Springcloud的服務調用---OpenFeign
1.1.引入依賴
           
<dependencies>
    <!-- Open Feign -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!-- eureka Client -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency><!-- 引入自己定義的api通用包,可以使用Payment支付Entity -->
        <groupId>com.krisswen.cloud</groupId>
        <artifactId>cloud-api-commons</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
           
1.2編寫配置檔案
           
server:
  port: 80
spring:
  application:
    name: cloud-consumer-feign-service
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
           
1.3編寫啟動類
           
@SpringBootApplication
@EnableFeignClients //開啟使用feign用戶端的功能
public class CustomerFeignMain80 {
    public static void main(String[] args) {
        SpringApplication.run(CustomerFeignMain80.class,args);
    }
}
           
1.4編寫grign用戶端
           
@FeignClient(value = "cloud-payment-service") //辨別目前接口就是一個feign用戶端,并且指定調用哪一個微服務
public interface PaymentFeignService {
    @GetMapping("payment/{id}")
    public CommonResult<Payment> findPaymentById(@PathVariable("id") Long id);
}
           
1.5編寫controller層
           
@RestController
public class CustomerFeignController {

    @Autowired
    PaymentFeignService paymentFeignService;

    @GetMapping("consumer/feign/payment/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){
        return paymentFeignService.getPaymentById(id);
    }
}
//localhost/consumer/feign/payment/1
           
1.6.測試結果
分别啟動 兩台eureka 7001  7002
兩台服務提供方 8001 8002
啟動feign用戶端  cloud-consumer-feign-order80
![在這裡插入圖檔描述](https://img-blog.csdnimg.cn/20210120082738315.JPG#pic_center)
           

1.7.最終的目錄為下圖所示:

Springcloud的服務調用---OpenFeign

2.逾時控制

2.1在提供方添加模拟服務逾時的方法用來測試

設定需要響應的時間

@GetMapping("/payment/feign/timeout")
public String paymentFeignTimeOut(){
    try {
        TimeUnit.SECONDS.sleep(3);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "time out.....";
}
           

2.2在feign用戶端中定義逾時方法

@GetMapping("/payment/feign/timeout")
public String paymentFeignTimeOut();
           

2.3.在controller中定義

@GetMapping("consumer/feign/timeout")
public String timeout(){
    //openfeign調用服務,預設等待時間是1秒鐘
    return paymentFeignService.paymentFeignTimeOut();
}
           

2.4.進行測試,通過Feign用戶端進行通路

2.4.1.首先我們直接通路服務中的paymentFeignTimeOut方法
2.4.2.然後我們直接通路feign用戶端類通路
           

2.5.設定避免逾時調用

feign:
  client:
    config:
      default:
        readTimeout: 5000
        connectTimeout: 5000
ribbon: #設定Feign用戶端調用逾時時間
  ReadTimeOut: 5000 #指的是建立連接配接所需要的的時間
  ConnectTimeOut: 5000 #指的是建立連接配接之後,伺服器讀取資源需要的時間
           

3.日志列印

 Feign提供了日志列印功能,我們可以通過配置來調整日志級别,進而了解Feign中Http的請求細節,就是對Feign接口的調用情況進行監控和輸出。

3.1.自定義配置類

@Configuration
public class FeignConfig {
    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}
           

3.2定義配置檔案的日志配置内容

logging:
  level:
    com.kriss.service.PaymentFeignService: debug
           

3.3測試結果,檢視我們的列印資訊

繼續閱讀