qq*群*号:541122375
上一篇文章,讲述了如何通过RestTemplate+Ribbon去消费服务,这篇文章主要讲述如何通过Feign去消费服务。
一、Feign简介
Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。
简而言之:
- Feign 采用的是基于接口的注解
- Feign 整合了ribbon
二、准备工作
继续用上一节的工程, 启动eureka-server,端口为8761; 启动service-hi 两次,端口分别为8762 、8773.
三、创建一个feign的服务
新建一个spring-boot工程,取名为serice-feign,在它的pom文件引入Feign的起步依赖spring-cloud-starter-feign、Eureka的起步依赖spring-cloud-starter-eureka、Web的起步依赖spring-boot-starter-web,代码如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.forezp</groupId> <artifactId>service-feign</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>service-feign</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>
在工程的配置文件application.yml文件,指定程序名为service-feign,端口号为8765,服务注册地址为http://localhost:8761/eureka/ ,代码如下:
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: port: 8765 spring: application: name: service-feign
在程序的启动类ServiceFeignApplication ,加上@EnableFeignClients注解开启Feign的功能:
package com.zntg.servicefeign; /** * 一、Feign简介 * Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。 * 它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。 * Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。 * 简而言之: * Feign 采用的是基于接口的注解 * Feign 整合了ribbon */ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.feign.EnableFeignClients; /** * @Description: SpringCloud教程 | 第三篇: 服务消费者(Feign) * 用法:在程序的启动类ServiceFeignApplication ,加上@EnableFeignClients注解开启Feign的功能 * @Author: zhengyunfei qq*群*号:541122375 * @Date: 2018/7/3 * @time:11:03 */ @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class ServiceFeignApplication { public static void main(String[] args) { SpringApplication.run(ServiceFeignApplication.class, args); } }
定义一个feign接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了service-hi服务的“/hi”接口,代码如下:
package com.zntg.servicefeign.service; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; /** * @Description: 定义一个feign接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了service-hi服务的“/hi”接口,代码如下: * @Author: zhengyunfei q群号:541122375 * @Date: 2018/7/3 * @time:11:05 */ @FeignClient(value="service-hi") public interface SchedualServiceHi { @RequestMapping(value = "/hi",method = RequestMethod.GET) String sayHiFromClientOne(@RequestParam(value = "name") String name); }
在Web层的controller层,对外暴露一个”/hi”的API接口,通过上面定义的Feign客户端SchedualServiceHi 来消费服务。代码如下:
package com.zntg.servicefeign.web; import com.zntg.servicefeign.service.SchedualServiceHi; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * @program: zntg_clould_v1 * @description:在Web层的controller层,对外暴露一个”/hi”的API接口,通过上面定义的Feign客户端SchedualServiceHi 来消费服务。代码如下: * @author: zhengyunfei * @create: 2018-07-03 11:08 **/ @RestController public class HiController { @Autowired SchedualServiceHi schedualServiceHi; /** * @Description: sayHi api接口 * @Author: zhengyunfei qq*群*号:541122375 * @Date: 2018/7/3 * @time:11:09 */ @RequestMapping(value = "/hi",method = RequestMethod.GET) public String sayHi(@RequestParam String name){ return schedualServiceHi.sayHiFromClientOne(name); } }
启动程序,多次访问http://localhost:8765/hi?name=forezp,浏览器交替显示:
hi forezp,i am from port:8762 hi forezp,i am from port:8763
本文源码下载:
https://github.com/zhengyunfei/spring_clould_v1/tree/master/service-feign
五、参考资料
相关推荐
史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)(Finchley版本) 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)(Finchley版本) 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)...
第三课: 服务消费者(Feign) 第四课: 断路器(Hystrix) 第五课: 路由网关(zuul) 第六课: 分布式配置中心(Spring Cloud Config) 第七课: 高可用的分布式配置中心(Spring Cloud Config) 第八课: 消息总线...
总之,Spring Cloud Feign为微服务架构中的服务消费者提供了优雅的调用方式,降低了开发复杂性,提高了代码的可读性和可维护性。通过合理的配置和使用,我们可以构建出高可用、高并发的分布式系统。
Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具包,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)...
在这个名为"SpringCloud-创建服务消费者-Feign方式示例代码.zip"的压缩包中,我们预计将看到一个简单的Spring Cloud应用,该应用展示了如何利用Feign作为服务消费者来调用其他服务。 首先,让我们了解Feign的基本...
在本教程中,我们将深入探讨如何使用Spring Cloud的2021.0.3版本,集成Nacos作为服务注册中心,并实现Feign客户端调用。Spring Cloud是一个强大的框架,用于构建分布式系统,如微服务架构,而Nacos是阿里巴巴开源的...
本资源"SpringCloud第3季2024.7z"很可能包含的是关于SpringCloud最新版本的教程或资料,可能涵盖了一些最新的特性和最佳实践。 1. **服务发现**:SpringCloud使用Eureka作为默认的服务注册与发现组件。服务提供者向...
3. **启用 Feign**:在服务消费者的配置类上添加 `@EnableFeignClients` 注解,启用 Feign 功能。 4. **定义 Feign 接口**:创建一个接口,用 `@FeignClient` 注解指定服务提供者的名称,然后在这个接口上定义要...
《7天学会Spring Cloud教程》是一本专注于快速掌握微服务框架Spring Cloud的实践指南。Spring Cloud作为Java领域的主流微服务框架,为企业级分布式应用提供了全面的解决方案,包括服务发现、配置中心、负载均衡、...
本基础教程旨在帮助初学者全面理解并掌握SpringCloud的核心概念和技术,通过实践源码与配套文档,深入学习其工作原理和应用方式。 首先,我们需要了解SpringCloud的基础架构,它由多个子项目组成,如Eureka(服务...
本文主要探讨了在SpringCloud中如何使用Ribbon和Feign作为服务消费者的组件,以及它们背后的负载均衡原理。首先,理解服务间通信的基础是HTTP协议,而注册中心Eureka则负责维护服务实例的列表。 Ribbon和Feign都是...
Spring Cloud Feign 是一个声明式的 Web 服务客户端,它使得编写 Web 服务客户端变得简单。Feign 让消费者能够以一种声明式的方式定义接口,这些接口将被自动映射到 HTTP 请求。它整合了 Ribbon 和 Eureka,可以方便...
springcloud整合openFeign,包括feign的基本使用、传参、指定特定的服务器、负载均衡等使用方法。 模块有: springcloud-feign-api springcloud-feign-consumer springcloud-feign-provider springcloud-feign-...
除了Feign自带的注解外它还支持JAX-RS注解,SpringCloud又为Feign增加了对SpringMVC注解的支持,同时为了能够使用和Spring Web中默认使用的相同的httpMessageConverter,SpringCloud集成了Ribbon和Eureka,用来在...
课程的源码是尚硅谷的springcloud教程源码,SpringCloud各种核心组件,到最终的微服务架构总结,帮助大家快速入门、上手并精通微服务框架SpringCloud。 课程中对比了 Dubbo 和 SpringCloud,并深入讲授SpringCloud...
Feign的设计灵感来源于Netflix,其核心功能是作为服务消费者之间的代理,提供了一种接口化的调用方式,让服务调用如同调用本地方法一样简单。 在Spring Cloud体系中,微服务间的通信通常有多种方式,如Ribbon和...
3. **Ribbon**:Ribbon是Netflix的客户端负载均衡器,它作为一个内嵌的组件被包含在服务消费者中。当服务消费者需要调用服务提供者时,Ribbon会根据Eureka获取的服务列表进行负载均衡,选择一个合适的实例进行请求。...
在本教程中,我们将深入探讨如何在Spring Cloud框架下实现Eureka集群,并整合Zuul和Feign。首先,我们要理解这些组件的核心功能。 **Eureka**是Spring Cloud中的服务发现组件,它允许微服务之间互相发现并进行通信...
Spring Cloud Feign统一设置验证token实现方法解析 Spring Cloud Feign是一个基于Netflix的Feign组件,提供了一个简洁的方式来构建RESTful风格的微服务接口。Feign组件提供了一个统一的接口调用方式,使得微服务...
- **Feign接口**: 在Feign中,服务消费者通过定义一个接口来描述远程调用,这个接口会带有注解,注解中包含了服务提供者的地址和服务接口等信息。 - **Feign Client**: 实现了HTTP客户端的功能,根据Feign接口生成...