SpringCloud(H版&Alibaba)技术(六) —— OpenFeign服务接口调用

本文详细介绍了SpringCloud OpenFeign的使用,包括创建消费者模块、配置YAML、主启动类、业务接口、控制器等步骤,并展示了如何实现负载均衡。此外,还讨论了OpenFeign的超时控制,通过调整 Ribbon 的超时设置避免调用错误。最后,讲解了OpenFeign的日志打印功能,通过配置日志级别和Bean来实现详细日志记录。
摘要由CSDN通过智能技术生成

目录

        OpenFeign简介

        OpenFeign使用(也是在消费端)​​

1.新建模块cloud-consumer-feign-order80​2.pom

​ 3.yml

 4.主启动

5.业务类  (业务逻辑接口+@FeignClient配置调用provider服务)

6.controller

7.测试

        OpenFeign超时控制

        OpenFeign日志打印功能

配置日志bean

    1.在80的springcloud包下新建config.FeignConfig

    2. 在80的yml文件中添加:

    3. 启动order80 查看后台日志​


OpenFeign简介

官网地址:https://docs.spring.io/spring-cloud-openfeign/docs/2.2.9.RELEASE/reference/html/
Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。只需创建一个服务接口并在接口上添加注解即可。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡

GitHub地址:https://github.com/spring-cloud/spring-cloud-openfeign


Feign和OpenFeign两者区别

OpenFeign使用(也是在消费端)

1.新建模块cloud-consumer-feign-order80

2.pom

        <!--openfeign-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>com.aurora.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

feign中整合了ribbon 


 3.yml

server:
  port: 80
eureka:
  client:
    register-with-eureka: false
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka

 4.主启动

@SpringBootApplication
@EnableFeignClients    //使用Feign激活并开启
public class OrderFeignMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderFeignMain80.class,args);
    }
}

5.业务类  (业务逻辑接口+@FeignClient配置调用provider服务)

  新建PaymentFeignService接口并新增注解@FeignClient

//Feign封装了Ribbon和RestTemplate,实现负载均衡和发送请求
@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")       ///作为feign的接口,找CLOUD-PAYMENT-SERVICE服务
public interface PaymentFeignService {

    @GetMapping(value = "/payment/get/{id}")        //8001的方法 能找到8001调用的地址
    public CommonResult getPaymentById(@PathVariable("id") Long id);
}

6.controller

@RestController
@Slf4j
public class OrderFeignController {

    @Resource
    private PaymentFeignService paymentFeignService;

    @GetMapping(value = "/consumer/payment/get/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){
        return paymentFeignService.getPaymentById(id);
    }
}

7.测试

 先启动2个eureka集群7001/7002 再启动2个微服务8001/8002 再启动OpenFeign启动
   浏览器输入:http://localhost/consumer/payment/get/31       实现负载均衡

Feign自带负载均衡配置项
总结:
在这里插入图片描述

OpenFeign超时控制

提供者在处理服务时用了3秒,提供者认为花3秒是正常,而消费者只愿意等1秒,1秒后,提供者会没返回数据,消费者就会造成超时调用报错。
所以需要双方约定好时间,不使用默认的。
模拟超时出错的情况

1.在8001的PaymentController里添加:(模拟服务处理时间长)

    @GetMapping(value = "/payment/feign/timeout")
    public String paymentFeignTimeout(){
        try { 
            TimeUnit.SECONDS.sleep(3); 
        }catch (Exception e) {
            e.printStackTrace();}
        return serverPort;
    }

 2.在80的PaymentFeignService中添加:

@GetMapping("/payment/feign/timeout")
public String paymentFeignTimeout();

3.然后在80的OrderFeignController中添加:

@GetMapping("/consumer/payment/feign/timeout")
public String paymentFeignTimeout(){
  //openFeign-ribbon,客户端一般默认等待1秒
  return paymentFeignService.paymentFeignTimeout();
}

 4.测试 
    启动server集群7001 7002,再启动提供者8001,再消费者80
    自测通过 但是加载时会转圈圈

输入:http://localhost/consumer/payment/feign/timeout   报错 显示超时

 OpenFeign默认等待一秒钟,超过后报错

yml文件中开启配置
由于OpenFeign默认支持Ribbon 所以超时控制也由ribbon来进行限制
在80yml中添加

#设置feign客户端超时时间(openfeign默认支持ribbon)
ribbon:
  #指的是建立连接使用的时间,适用于网络状况正常的情况下,两端连接所用的时间
  ReadTimeout: 5000
  #指的是建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000


重启order80 再进行测试 可正常读取

OpenFeign日志打印功能


日志级别

配置日志bean

1.在80的springcloud包下新建config.FeignConfig

import feign.Logger;	//不要导错包

@Configuration
public class FeignConfig {

    @Bean
    Logger.Level feignLoggerLevel(){
        //打印最详细的日志
        return Logger.Level.FULL;
    }

}

2. 在80的yml文件中添加:

#开启日志的feign客户端
logging:
  level:
    #feign日志以什么级别监控哪个接口
    com.aurora.springcloud.service.PaymentFeignService: debug	#写你们自己的包名  
    #以debug级别打印full全日志

3. 启动order80 查看后台日志

下一篇:SpringCloud(H版&Alibaba)技术(七) —— Hystrix断路器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值