spring cloud Dalston.SR4 feign 实际开发中踩坑(一)

本文采用的springcloud 版本 Dalston.SR4   所有例子以Dalston.SR4 版本为准

feign  作为 springcloud 微服务 内部通信的组件  还是有很多坑的

坑1、 

Load balancer does not have available server for client

这是因为 默认的eureka 启动时  相关的服务端还没有来得及往 eureka 服务端注册    或者 eureka server中没有注册 相关的服务   

坑2、看了很多 教程   说 feign  类上的 @RequestMapping 不会被加入 接口映射   没错 想想也应该是这样  但是为了解决这个问题   我在接口方法上加入映射路径是否可行呢

可以做个 测试   我这里有 2个服务  MESSAGE-SERVICE 是服务提供者  SMS-SERVICE 是 服务消费者      feignware 单独模块 用来统一提供 相互调用的api  生产中建议feign集中配置   一个eureka server  

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 :      这样写  直接加入 类一级的/msg

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

SMS-SERVICE 调用接口:

@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;
  }

}

流程是这样的 :     

执行结果:  请求成功

 

去掉了 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包  跟消费方  无所谓

 

转载于:https://my.oschina.net/10000000000/blog/1591028

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值