zoukankan      html  css  js  c++  java
  • 【Spring Cloud-Open Feign】使用OpenFeign完成声明式服务调用

    理解OpenFeign

    • OpenFeign是Netflix 开发的声明式、模板化的HTTP请求客户端。可以更加便捷、优雅地调用http api。
    • OpenFeign会根据带有注解的函数信息构建出网络请求的模板,在发送网络请求之前,OpenFeign会将函数的参数值设置到这些请求模板中。
    • OpenFeign主要是构建微服务消费端。只要使用OpenFeign提供的注解修饰定义网络请求的接口类,就可以使用该接口的实例发送RESTFUL的网络请求。还可以集成Ribbon和Hystrix,提供负载均衡和断路器。
    • 英文表意为“假装,伪装,变形”, 是一个 Http 请求调用的轻量级框架,可以以 Java 接口注解的方式调用 Http 请求,而不用像 Java 中通过封装 HTTP 请求报文的方式直接调用。通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。Feign 封装 了HTTP 调用流程,面向接口编程

    Feign和OpenFeign的关系

    • Feign本身不支持Spring MVC的注解,它有一套自己的注解
    • OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。 OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口, 并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

    声明式服务调用

    provider方提供公用API包,Feign通过SpringMVC的注解来加载URI

    好处

    服务提供者发布一个API接口服务调用者引入这个包,调用服务提供者方法的时候,只需要点一下就可以把方法点出来,省去了手动拼接URL比较low的方式,同样也能够保证服务生产者和服务消费者方法统一

    创建API

    • 创建一个支持web的SpringBoot项目,然后创建接口,实际项目中可根据业务灵活调整
    @RequestMapping("/user")
    public interface ProviderApi {
    	@RequestMapping("/alive")
    	public String alive();
    }
    
    • mvn install打包一下,主要目的是为了让User-Provider和User-Consumer引入这个jar

    创建User-Provider

    • 需要引入依赖:Spring Web 和 Spring Eureka Client
    <!-- Spring Web -->
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Spring Eureka Client -->
    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!-- APIjar包 -->
    <dependency>
    	<groupId>com.yibing</groupId>
    	<artifactId>user-api</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    </dependency>
    
    • 新建Controller,并实现API接口
    @RestController
    public class ProviderController implements ProviderApi{
    	@Override
    	public String alive() {
    		return "hello alive";
    	}
    }
    

    创建User-Consumer

    • 引入依赖,包括Spring Web 和 Spring Eureka Client、Open Feign、自定义的API的jar包
    <!-- Spring Web -->
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Eureka Client -->
    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!-- Open Feign -->
    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!-- APIjar包 -->
    <dependency>
    	<groupId>com.yibing</groupId>
    	<artifactId>user-api</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    </dependency>
    
    • 修改启动类,加上@EnableFeignClients注解
    @EnableFeignClients
    @SpringBootApplication
    public class UserConsumerApplication {
    	public static void main(String[] args) {
    		SpringApplication.run(UserConsumerApplication.class, args);
    	}
    }
    
    • 创建一个接口,继承provider提供的接口API
    //注意:这里的FeignClient注解必须要加,意味着服务路由
    @FeignClient(name = "user-provider")
    public interface ConsumerService extends ProviderApi{
    	
    }
    
    • 在Controller中注入ConsumerService,就可以调用Provider提供的方法了
    @RestController
    public class ConsumerController {
    	
    	@Autowired
    	ConsumerService consumerService;
    	
    	@RequestMapping("/alive")
    	public String alive() {
    		return consumerService.alive();
    	}
    }
    

    测试

    http://localhost:90/alive
    
  • 相关阅读:
    文本环加载动画html代码
    自己总结的特殊符号,大家有用可以复制
    《名侦探柯南》动画登陆bilibili
    复古风,vivo申请滑盖结构的手机外观专利
    GitHub 热榜第一!可交互全球疫情地图
    最新免费领哔哩哔哩会员教程
    百度网盘免费领取会员
    Apple Watch Series 6或将增加焦虑监测和睡眠追踪功能
    谷歌更新其社区人员流动报告 帮助了解民众遵守封锁令的情况
    计算5的n次幂html代码
  • 原文地址:https://www.cnblogs.com/zhangyibing/p/14051812.html
Copyright © 2011-2022 走看看