OpenFeign在Spring Cloud中的使用

OpenFeign

OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等,OpenFeign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。OpenFeign的使用方式是:使用OpenFeign的注解定义接口,调用接口,就可以调用服务注册中心的服务。

  1. pom依赖

    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
  2. 主启动类添加@EnableFeignClients注解

    @SpringBootApplication
    @EnableEurekaClient
    @EnableFeignClients
    public class FeigndemoApplication {
        
       public static void main(String[] args) {
          SpringApplication.run(FeigndemoApplication.class, args);
       }
    
    }
    
  3. properties配置文件

    server.port=9001
    
    spring.application.name=cloud-order-service
    
    #false表示不向注册中心注册自己
    eureka.client.register-with-eureka=true
    #false表示自己就是注册中心
    eureka.client.fetch-registry=true
    #设置与eureka server交互地址查询服务和注册服务都依赖这个地址
    eureka.client.service-url.defaultZone=http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
    
    eureka.instance.instance-id=order9001
    
    eureka.instance.prefer-ip-address=true
    
  4. 使用OpenFeign的注解定义接口

    消费者定义接口加上@FeignClient(value = “CLOUD-PAYMENT-SERVICE”)注解,接口内方法即为服务者的Control的方法,复制粘贴。

    /**
    *消费者接口
    **/
    @Component
    @FeignClient(value = "CLOUD-PAYMENT-SERVICE")
    public interface PaymentService {
    
        @GetMapping("/sent/user/login/{username}/{password}")
        @LoadBalanced
        Result<Users> login(@PathVariable String username, @PathVariable String password);
    }
    
    /**
    *服务者的Control类
    **/
    @RestController
    @RequestMapping("/user")
    public class UsersController {
    
        @Resource
        private UsersService usersService;
    
        @GetMapping("/login/{username}/{password}")
        public Result<Users> login(@PathVariable String username,@PathVariable String password){
            return usersService.login(username,password);
        }
    }
    
  5. 消费者调用接口,就可以调用服务注册中心的服务

    @RestController
    public class OrderController {
    
        @Resource
        private PaymentService paymentService;
    
        @GetMapping("/consumer/login/{admin}/{password}")
        public Result<Users> orderLogin(@PathVariable String admin, @PathVariable String password){
            return paymentService.login(admin, password);
        }
    }
    
  6. OpenFeign 客户端默认等待1秒钟,但是如果服务端业务超过1秒,则会报错。为了避免这样的情况,我们需要设置feign客户端的超时控制。

    #设置feign客户端建立连接时间
    feign.client.config.default.connect-timeout=5000
    #设置feign客户端建立连接后,读取到资源的时间
    feign.client.config.default.read-timeout=5000
    
  7. Feign日志级别

    NONE:默认级别,不显示日志
    BASIC:仅记录请求方法、URL、响应状态及执行时间
    HEADERS:除了BASIC中定义的信息之外,还有请求和响应头信息
    FULL:除了HEADERS中定义的信息之外,还有请求和响应正文及元数据信息

    定义OpenFeignConfig配置类,设置日志级别为 FULL。

    @Configuration
    public class OpenFeignConfig {
        @Bean
        Logger.Level feignLoggerLevel(){
            return Logger.Level.FULL;
        }
    }
    

    设置feign以什么级别监控那个接口

    #feign以什么级别监控那个接口
    logging.level.com.example.feigndemo.service.PaymentService=debug
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值