因為并發量比較小,同時dubbo相對比較複雜,所有樓主在服務間調用時,依然選擇了openfeign,同時将服務間調用的接口封裝為子工程,進行統一的api管理。
api子工程
這裡建立了一個子工程

1.pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.fallback:熔斷
當服務調用失敗,會跳轉到該類
@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;
}
}
3.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注解
父工程調用
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>
啟動類
@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();
}
}