FeignClient RPC使用

FeignClient RPC使用

一、创建FeignClient

// 创建Feign客户端
@FeignClient(contextId = "myClient", name = "mt-prject-name:student",
url = "http://localhost:8080/")
public interface ReportApiClient {
  // 对应服务的接口(controller层的接口一致)
  @GetMapping("/v2/student")
  StudyReportNewVO report(
      @RequestParam(value = "classroomId", required = true) Long classroomId,
      @RequestParam(value = "studentId", required = true) Long studentId);

}

二、启动类增加扫描

// 增加@EnableFeignClients注解,扫描上面FeignClient路径。
@EnableDiscoveryClient
@EnableFeignClients({"com.mt.rpc"})
@SpringBootApplication
public class DemoApplication {
  public static void main(String[] args) {
    long startTime = System.currentTimeMillis();
    SpringApplication.run(DemoApplication.class, args);
    log.info("api application startup time: {}s", (System.currentTimeMillis() - startTime) / 1000);
  }
}

三、controller层就可以直接通过FeignClient调用了

一般将其放在service层调用

@RestController
public class NewCourseController {

  private final ReportApiClient reportApiClient;


  /**
   * cmt
   *
   * @author: mao-tao
   **/
  public NewCourseController(ReportApiClient reportApiClient) {
    this.reportApiClient = reportApiClient;
  }
   
  /**
   * 查询
   **/
  @GetMapping("/newFiveReport")
  public StudyReportNewVO report(@RequestParam(value = "classroomId", required = true)
          Long classroomId, @RequestParam(value = "studentId", required = true)
          Long studentId) {
    return reportApiClient.report(classroomId, studentId);
  }

}

四、rpc请求中增加参数

当服务提供方,需要进行身份认证,则在rpc调用时,添加验证参数。

// 通过拦截器给feign的RequestTemplate请求增加参数
@Configuration
@Slf4j
public class FeignReqInterceptor implements RequestInterceptor {
  @Override
  public void apply(RequestTemplate requestTemplate) {
    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    if (attributes != null) {
      HttpServletRequest req = attributes.getRequest();
      // 增加需要验证的参数
      requestTemplate.header("Authorization", req.getHeader("Authorization"));
      log.info("add token to feign request");
    }
  }
}

五、解说拦截器

RequestInterceptor是openfeign提供的一个拦截器接口,可以配置0个或多个RequestInterceptors,目的是为所有请求添加头,但是不能保证拦截器应用的顺序。一旦应用了拦截器,就会调用Target.apply(RequestTemplate)来创建通过Client发送的不可变http请求。

RequestInterceptors是通过Feign.Builder.requestInterceptors配置的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值