ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringCloud-OpenFeign

2021-01-19 21:02:06  阅读:174  来源: 互联网

标签:feign OpenFeign SpringCloud boot spring org public cloud


OpenFeign简介

与dubbo相似,可通过消费者controller调用提供者service层方法。
与之不同的是,OpenFeign只能调用提供者的controller,即,将controller作为接口,消费者来调用这个接口的方法。
相当于调用提供者的controller,与RestTemplate没有本质区别

Feign作用

Feign中集成了Ribbon,并在Ribbon+Rest
Template的基础上进一步封装。(只需创建一个接口并使用注解的方式来配置)简化了使用SpringcloudRibbon时,自动封装服务调用客户端的开发量。
Feign利用Ribbon维护了Payment的服务列表信息,并通过轮询实现了客户端的负载均衡。
但,与Ribbon区别是,feign只需定义服务绑定接口且以声明式的方法,更简单的实现了服务调用。
Feign自带负载均衡配置,不用手动配置。

项目测试:

创建消费者模块:cloud-consumer-feign-order80 pom.xml文件中添加依赖

<dependencies>
    <!-- Open Feign -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!-- eureka Client -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
        <groupId>com.usan.commons</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.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

编写yml配置文件

server:
  port: 80
spring:
  application:
    name: cloud-consumer-feign-service
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/

编写启动类

@SpringBootApplication
@EnableFeignClients // 开启使用feign客户端功能
public class CustomerFeignMain80 {
    public static void main(String[] args) {
        SpringApplication.run(CustomerFeignMain80.class, args);
    }
}

编写feign客户端

// 标识当前接口是一个feign客户端,并且指定调用哪一个微服务
@FeignClient(value = "cloud-payment-service")
public interface PaymentFeignService {

    @GetMapping("payment/{id}")
    CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);
}

编写controller

@RestController
public class CustomerFeignController {

    @Autowired
    private PaymentFeignService paymentFeignService;

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

启动测试
需要启动 eureka7001,7002、服务提供方 8001 8002
在这里插入图片描述

超时控制

在8001服务提供方的controller里面定义一个故意超时方法

@GetMapping("payment/timeout")
    public String testTimeOut(){
        /*try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }*/
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "这是一个模拟超时的服务......";
    }

在feign客户端PaymentFeignService里面定义

@GetMapping("payment/timeout")
	public String testTimeOut();

在消费方controller类里面定义

 //调用超时的服务
    @GetMapping("order/feign/timeout")
    public String testTimeOut(){
        return this.orderFeignClient.testTimeOut();
    }

启动进行测试,这个时候经过三秒后服务器给我们返回结果
在这里插入图片描述

OpenFeign日志打印

首先编写一个config配置类

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

添加yml配置文件

 logging:
  level:
    com.jiyun.client.OrderFeignClient: debug #这里是通过调用client类进行日志配置

启动测试,访问http://localhost/order/feign/2,看控制台最终效果
在这里插入图片描述

标签:feign,OpenFeign,SpringCloud,boot,spring,org,public,cloud
来源: https://blog.csdn.net/weixin_45154349/article/details/112851824

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有