Feign

远程调用其他服务

  • 1.引入open-feign
  • 2.编写接口 告诉SpringCloud这个接口需要调用远程服务(远程接口)
  • 3.接口内声明的每个方法都是调用哪个远程服务的哪个请求
  • 4.开启远程调用的功能 @EnableFeignClients 基础包扫描 Feign包
  • 5.在Service种注入Feign接口对象
    @FeignClient标签的常用属性如下:

value: 服务名
name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现

  • url: url一般用于调试,可以手动指定@FeignClient调用的地址
  • decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException
  • configuration: Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
  • fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
  • fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
  • path: 定义当前FeignClient的统一前缀
/**
 * @FeignClient 远程客户端 括号内注册中心种的服务名称 声明式远程调用
 */
@FeignClient("xmall-coupon")
public interface CouponFeignService {

    @RequestMapping("coupon/coupon/member/list")
    public R memberCoupons();
}
@Autowired
    private CouponFeignService couponFeignService;


    @RequestMapping("/coupons")
    public  R test(){
        MemberEntity memberEntity = new MemberEntity();
        memberEntity.setNickname("会员1");

        //调用远程服务
        R r = couponFeignService.memberCoupons();

        return R.ok("请求成功").put("member", memberEntity).put("coupons", r.get("coupons"));
    }

Feign数据传递

可以将数据封装为一个对象 TO A服务B服务都会使用

A服务向B服务传递数据
将数据封装成对象,Springcloud会将这个对象默认转为JSON数据,B会收到JSON数据,B也可以将JSON转为对象

@FeignClient("xmall-coupon")
public interface CouponFeignService {
    /**
     * 1、CouponFeignService.saveSpuBounds(spuBoundTo);
     *      1)、@RequestBody将这个对象转为json。
     *      2)、找到gulimall-coupon服务,给/coupon/spubounds/save发送请求。
     *          将上一步转的json放在请求体位置,发送请求;
     *      3)、对方服务收到请求。请求体里有json数据。
     *          (@RequestBody SpuBoundsEntity spuBounds);将请求体的json转为SpuBoundsEntity;
     * 只要json数据模型是兼容的。双方服务无需使用同一个to
     * @param spuBoundTo
     * @return
     */
    @PostMapping("/coupon/spubounds/save")
    R saveSpuBouns(@RequestBody SpuBoundTo spuBoundTo);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值