前言 最近在調研 小米開放平臺 API 的能力,發現能力支持的實在有點少,沒辦法只能另闢蹊徑去逆向 Consule UI 的能力。 逆向工程最重要解決的就是“認證”。有沒有辦法自動登錄鑒權,或者使用一個長久可靠、可續期的 token,直接決定了該 Consule UI 是否可逆向。 逆向工程-認證 ...
Feign
Feign是一個聲明式的http客戶端,官方地址:https://github.com/OpenFeign/feign
1.使用
1.引入依賴
<!-- Feign客戶端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.在消費者啟動類開啟Feign(添加註解)
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients //註解開啟
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
3.創建client文件,編寫介面類
/**
* @Date 2022/10/30 19:17
* @Author 郜宇博
*/
@FeignClient("userservice")
public interface UserClient {
/**
* @param id userid
* @return User對象
*
*/
@GetMapping("user/{id}")
User findById(@PathVariable("id") Long id);
}
4.使用
@GetMapping("{orderId}")
public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
// 根據id查詢訂單並返回
Order order = orderService.queryOrderById(orderId);
//調用介面==================
User user = userClient.queryById(order.getUserId());
//調用介面結束=====================
order.setUser(user);
return order;
}
並且feign已經集成了ribbon
2.性能優化
1.HttpClient支持
2.連接池
3.日誌級別儘量用basic
feign底層的連接是沒有連接池的,需要更換httpclient
<!-- Feign-http-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
連接池配置
feign:
httpclient:
enabled: true # 支持httpclient
3.實踐使用
1.創建feign-api模塊整合請求
2.引入依賴
<!-- Feign客戶端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3.編寫client介面和實體類
/**
* @Date 2022/10/30 19:17
* @Author 郜宇博
*/
@FeignClient("userservice")
public interface UserClient {
/**
* @param id userid
* @return User對象
* 11
*/
@GetMapping("user/{id}")
User findById(@PathVariable("id") Long id);
}
4.在消費者pom文件中引入編寫的feign-api工程
<!-- feign-api-->
<dependency>
<groupId>cn.itcast.demo</groupId>
<artifactId>feign-api</artifactId>
<version>1.0</version>
</dependency>
5.使用前註入client類
由於在其他工程中,因此無法直接註入,需要在啟動類的註解中加入Client類
@Autowired
private UserClient userClient;
啟動類中
6.使用
//調用介面==================
User user = userClient.queryById(order.getUserId());
//調用介面結束=====================