SpringCloud/Feign遠端呼叫簡單實現
阿新 • • 發佈:2018-12-20
<dependency>
<!--註冊中心客戶端 eureka-->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<!--遠端呼叫元件 feign-->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
第二步:呼叫方(客戶端)A:
2.1 啟動類配置註解
public classClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
}
2.2 客戶端
FeignClientHystrix:
public class FeignClientHystrix implements FeginClientTest {
publicint noParamGet() {
log.error("TEST模組<---------->遠端呼叫失敗");
return 0;// 呼叫失敗時返回
}
public int noParamPost() {
return 0;
}
public int oneParamGet(String token) {
return 0;
}
public int oneParamGet01(String token) {
return 0;
}
public int oneParamPost(UserInfo userInfo) {
return 0;
}
public int oneParamPost01(UserInfo userInfo) {
return 0;
}
public int oneParamPost02(UserInfo userInfo) {
return 0;
}
public int oneParamPost03(UserInfo userInfo) {
return 0;
}
public int MultiParamsPost01(UserInfo userInfo, String token) {
return 0;
}
public int MultiParamsPost02(UserInfo userInfo, String token) {
return 0;
}
public int MultiParamsGet01(UserInfo userInfo, String token) {
return 0;
}
public int MultiParamsGet02(UserInfo userInfo, String token) {
return 0;
}
}
FeginClientTest 介面:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;
// 前提是啟動類配置 @EnableFeignClients (
value = "test", // 遠端模組在註冊中心中的名稱 不區分大小寫
fallback = FeignClientHystrix.class, // 異常處理類
configuration = FeignClientHystrix.class // 掃描這個類 也可以直接在該類上加 @Component
)
public interface FeginClientTest {
/** 無參*/
// 無參get請求
/**
* 不指明請求方式 預設是GET請求:
*
* @RequestMapping(value = "testController/fun01")
*/
value = "testController/noParamGet", method = RequestMethod.GET) (
int noParamGet();
// 無參post請求
value = "testController/noParamPost", method = RequestMethod.POST) (
int noParamPost();
/**單個引數*/
// 單個引數get請求
/**
* get請求第一種: 直接對路徑的引數進行設定:只有get請求有
*
* @PathVariable: 獲取url中的具體的值進行設定(由SpringMVC提供)
*/
value = "testController/oneParamGet/{token}", method = RequestMethod.GET) (
String oneParamGet( ("token") String token);
/**
* get請求第二種:
*/
value = "testController/oneParamGet01", method = RequestMethod.GET) (
String oneParamGet01( ("token") String token);
// 單個引數post請求
value = "testController/oneParamPost", method = RequestMethod.POST) (
int oneParamPost( UserInfo userInfo);
/**
* 1.引數前面是@RequestBody時,method 不起作用
* 2.沒有註解 沒有 method
*/
value = "testController/oneParamPost01", method = RequestMethod.GET) (
int oneParamPost01( UserInfo userInfo);
value = "testController/oneParamPost02") (
int oneParamPost02( UserInfo userInfo);
value = "testController/oneParamPost03") (
int oneParamPost03(UserInfo userInfo);
/**
* 多個引數:
* 注意:
* 所有引數中RequestBody使用的引數只能只有有一個
* 使用RequestBody註解 method就會失效 請求方式就是POST
* 呼叫者A使用RequestBody註解傳參,被呼叫者B必須用RequestBody接參
*/
//多個引數POST請求
value = "testController/MultiParamsPost01", method = RequestMethod.GET) (
int MultiParamsPost01( UserInfo userInfo, ("token") String token);
value = "testController/MultiParamsPost02", method = RequestMethod.POST) (
int MultiParamsPost02( UserInfo userInfo, ("token") String token);
//多個引數GET請求
value = "testController/MultiParamsGet01", method = RequestMethod.GET) (
int MultiParamsGet01( UserInfo userInfo, ("token") String token);
value = "testController/MultiParamsGet02") (
int MultiParamsGet02( UserInfo userInfo, ("token") String token);
/**
* 最後:
* 如果 請求引數使用 @RequestParam 並呼叫和被呼叫的引數名字一致時,
* 被呼叫方@RequestParam可以省略不寫(單個引數和多個引數都適用)
*/
}
第三步:被呼叫方B
TestController
value = "testController") (
public class TestController {
value = "/noParamGet") // 請求方式必須和呼叫者A中的請求方式一致 (
public int noParamGet(){
return 111111111;
}
value = "/oneParamGet/{token}") // 請求方式必須和呼叫者A中的請求方式一致 (
public String noParamGet( ("token") String token){
return token;
}
}