2.springcloudAlibaba-openFeign

 1.springcloudAlibaba-nacos

2.springcloudAlibaba-openFeign

3.springcloudAlibaba-负载均衡器Ribbon

4.springcloudAlibaba-nacos配置中心

5.springcloudAlibaba-Seata 分布式事务

6.springcloudAlibaba-sentinel

7.springcloudAlibaba-网关gateway


目录

什么是openFeign

springcloudAlibaba整合openFeign

 Spring Cloud Feign的自定义配置及使用

日志

自定义拦截器

配置超时时间


什么是openFeign

Feign是Netflix开发的声明式、模板化的HTTP客户端,其灵感来自Retrofit、JAXRS-2.0以及

WebSocket。Feign可帮助我们更加便捷、优雅地调用HTTP API Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。

Spring Cloud openfeign对Feign进行了增强,使其支持Spring MVC注解,另外还整合了

Ribbon和Nacos,从而使得Feign的使用更加方便

springcloudAlibaba整合openFeign

order module中创建controller

@RestController
@RequestMapping(value = "/orderController")
public class OrderController {
    @RequestMapping(value = "/getInfo")
    public String getInfo() {
        return "获取成功:";
    }
}

重新创建 module customer

resources 下创建 application.yml 端口9998

server:
  port: 9998
spring:
  application:
    name: customer-service
  cloud:
    nacos:
      server-addr: 49.232.193.91:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public

在application中加入 @EnableFeignClients 注解

@EnableFeignClients
@SpringBootApplication
public class CustomerApplication {
    public static void main(String[] args) {
        SpringApplication.run(CustomerApplication.class);
    }
}

创建controller

@RestController
public class CustomerController {

@Autowired
OrderService orderService;

    @RequestMapping(value = "/getUserInfo")
    public String getUserInfo() {
        String result = orderService.getInfo();
        return result;
    }
} 

创建 interface Service

@FeignClient(value= "order-service",path= "/orderController")
public interface OrderService {
    @RequestMapping("/getInfo")
  String getInfo();
    
    /**
     * 被调用方
     * @RestController
     * @RequestMapping(value = "/orderController")
     * public class OrderController {
     *     @RequestMapping(value = "/getInfo")
     *     public String getInfo() {
     *         return "获取成功:";
     *     }
     * }
     * */
}

@FeignClient(value= "order-service",path= "/orderController") 中 value 对应调用服务名

path 对应 被调用controller 的RequestMapping

调用接口 localhost:9998/getUserInfo

 Spring Cloud Feign的自定义配置及使用

Feign 提供了很多的扩展机制,让用户可以更加灵活的使用

日志

全局配置

创建config类

@Configuration //如果全局配置加入Configuration 针对单个服务去掉
public class FeignConfig {
    /**
     * 通过源码可以看到日志等级有4种,分别是:
     * NONE【性能最佳,适用于生产】:不记录任何日志(默认值)。
     * BASIC【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及
     * 执行时间。
     * HEADERS:记录BASIC级别的基础上,记录请求和响应的header。
     * FULL【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body
     * 和元数据
     */
    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

在yml中加入 log日志级别

logging:
  level:
    com.customer.service: debug

将order module复制一份 yml 端口改为 9997 服务名改为 order-service2

customer 中 为order-service 创建 interface 接口 同时在controller中调用

@FeignClient(value= "order-service2",path= "/orderController")
public interface Order2Service {
    @RequestMapping("/getInfo")
  String getInfo();

    /**
     * 被调用方
     * @RestController
     * @RequestMapping(value = "/orderController")
     * public class OrderController {
     *     @RequestMapping(value = "/getInfo")
     *     public String getInfo() {
     *         return "获取成功:";
     *     }
     * }
     * */
}

    @RequestMapping(value = "/testLog")
    public String testLog() {
        String result = orderService.getInfo();
        String result2 = order2Service.getInfo();

        return result;
    }

请求 http://localhost:9998/testLog

单个服务日志

在FeignClient中加入 configuration

去掉config中Configuration 注解

还有一种方式是通过配置文件的方式

logging:
  level:
    com.customer.service: debug
feign:
  client:
    config:
      order-service: #对应微服务
        loggerLevel: FULL

自定义拦截器

在config中增加拦截类

public class FeignInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate template) {
//可以做一些 验证 权限的拦截控制
        System.out.println("拦截开始-----------------------");
        String access_token = UUID.randomUUID().toString();
        template.header("Authorization", access_token);
    }
}

在feignConfig中 配置

    @Bean
    public FeignInterceptor feignAuthRequestInterceptor() {
        return new FeignInterceptor();
    }

配置超时时间

在feignConfig 配置

  @Bean
    public Request.Options options() {
        //通过Options可以配置连接超时时间和读取超时时间,Options的第一个参数是连接的超时
        //时间(ms),默认值是2s;第二个是请求处理的超时时间(ms),默认值是5s
        return new Request.Options(5000, 10000);
    }

版权声明:本文为weixin_42093813原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。