spring cloud Dalston.SR4 feign 實際開發中踩坑(一)

本文采用的springcloud 版本 Dalston.SR4   全部例子以Dalston.SR4 版本爲準java

feign  做爲 springcloud 微服務 內部通訊的組件  仍是有不少坑的spring

坑1、 api

Load balancer does not have available server for client

這是由於 默認的eureka 啓動時  相關的服務端尚未來得及往 eureka 服務端註冊    或者 eureka server中沒有註冊 相關的服務   app

坑2、看了不少 教程   說 feign  類上的 @RequestMapping 不會被加入 接口映射   沒錯 想一想也應該是這樣  可是爲了解決這個問題   我在接口方法上加入映射路徑是否可行呢微服務

能夠作個 測試   我這裏有 2個服務  MESSAGE-SERVICE 是服務提供者  SMS-SERVICE 是 服務消費者      feignware 單獨模塊 用來統一提供 相互調用的api  生產中建議feign集中配置   一個eureka server  post

MESSAGE-SERVICE  提供接口 :測試

@RestController
@RequestMapping("/msg")
public class UserController {

    @PostMapping("/get")
    public User getUser(@RequestBody User user) {
        System.out.println("i am  message-service <<<<<<<<<<<<<<<<<<<<");
        System.out.println(user);
        return user;
    }

}

feignware :      這樣寫  直接加入 類一級的/msgspa

@FeignClient(value = "MEMBER-SERVICE")
public interface UserService {
      @PostMapping("/msg/get")
     User  get(@RequestBody User user);
}

SMS-SERVICE 調用接口:code

@RestController
@RequestMapping("/sms")
public class RemoteController {
  @Resource
    private UserService userService;
  @GetMapping("/go")
  public User test(User user){
      System.out.println(">>>>>>>>>>>");
      User result=userService.get(user);
      System.out.println(result);
      return result;
  }

}

流程是這樣的 :     server

執行結果:  請求成功

 

去掉了 feignware 中 /msg 一級後 測試 結果:

結果說明: feign  類上的 @RequestMapping 不會被加入 接口映射  是對的     若是 想加入正好上面是個解決方案

坑3、    feign 調用是 post 請求    仍是上面的例子 測試看看   先說明一句  看到有的教程上說 

feign只支持 @RequestMapping     這種說法是不對  上面已經有例子證實了這一點  起碼上  @GetMapping @PostMapping 是支持的    其餘 springcloud版本沒有試過

 咱們先三者都採用@GetMapping  看看結果: 

405  究竟是哪裏不支持 get呢   來幾組測試:

sms  get   feignware get   message  get    結果   405 

sms  get   feignware post   message  get    結果   405 

sms  post   feignware post   message  get    結果   405   

sms  post   feignware get  message  post 結果   200

sms  post   feignware post   message   post  結果   200   

sms  get   feignware post   message   post  結果   200   

sms  get   feignware get   message   post  結果   200   

結果總結一下   就是  @RequestBody 調用提供方 必定要用post        feign包  跟消費方  無所謂

相關文章
相關標籤/搜索