Springcloud的服務呼叫---OpenFeign
阿新 • • 發佈:2021-02-03
技術標籤:SpringcloudOpenFeign
目錄:
1.OpenFeign
1.1建立feign模組
1.2超時控制
1.3日誌列印
一,簡單介紹一下服務呼叫
服務呼叫,指的是註冊到服務端上的客戶端之間資料的相互呼叫問題。
spring-cloud呼叫服務有兩種方式,一種是 Ribbon+RestTemplate, 另外一種是Feign。
服務降級,指的是當伺服器壓力劇增時,根據當前業務情況及流量對一些服務和頁面有策略的降級,
以此釋放伺服器資源以保證核心任務的正常執行。
二,OpenFeign
1.建立feign模組
首先,新建一個消費者募模組.feign自帶負載均衡配置,所以不用手動配置.
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.最終的目錄為下圖所示:
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測試結果,檢視我們的列印資訊