服務間呼叫是微服務體系中必不可少的一部分,在springcloud alibaba的官網中,推薦使用是dubbo,但因為并發量比較小,同時dubbo相對比較復雜,所有樓主在服務間呼叫選型時,依然選擇了openfeign,同時將服務間呼叫的介面封裝為子工程,進行統一的api管理,避免小伙伴們造重復的輪子,
1.新建api子工程
1.搭建子工程
這里新建了一個子工程,檔案結構如下,


2.添加pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
3.實作fallback熔斷方法
當服務呼叫失敗,會跳轉到該類,后文會與Sentinel一起使用,
@Component
public class UserFallBack implements UserApi {
@Override
public Result<UserVO> getCurrentUser() {
Result<UserVO> result = new Result<>();
String error = "呼叫system獲取當前用戶資訊失敗!";
result.setCode(506);
result.setMessage(error);
return result;
}
@Override
public Result<UserVO> getUser(UserVO UserVO) {
Result<UserVO> result = new Result<>();
String error = "呼叫system獲取輸入用戶資訊失敗!";
result.setCode(506);
result.setMessage(error);
return result;
}
}
4.feign介面實作
@FeignClient(name = "system", fallback = UserFallBack.class) //其中name為nacos中的服務名
public interface UserApi {
/**
* 獲取當前用戶資訊
*
* @return
*/
@GetMapping("/getCurrentUser")
Result<UserVO> getCurrentUser();
/**
* 通過物體獲取用戶資訊
*
* @return
*/
@GetMapping("/getUser")
Result<UserVO> getUser(@SpringQueryMap UserVO UserVO);
}
這里需要注意,如果在get請求時,同時boby中有值,feign會把get轉換成post,所以這種情況需要使用@SpringQueryMap注解,
2.父工程呼叫
1.修改pom.xml
1.在pom檔案中引入子工程 ,詳細配置可以參考樓主文章:
<dependencies>
<dependency>
<groupId>com.vanpeng</groupId>
<artifactId>common-api</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
2.修改啟動類
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients("com.common.api")
public class DatacenterApplication {
public static void main(String[] args) {
SpringApplication.run(DatacenterApplication.class, args);
}
}
注意:@EnableFeignClients(“com.common.api”)一定要指定api子工程路徑,否則不執行呼叫,
3.呼叫
public class DemoController {
@Autowired
UserApi userApi;
@GetMapping("/demo")
public void demo() {
Result<RestSysUserVO> xxx = userApi.getCurrentUser();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/304314.html
標籤:java
