`

SpringCloud | 第三篇: 服务消费者(Feign)

 
阅读更多
一、Feign简介
Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

简而言之:
1.Feign 采用的是基于接口的注解
2.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的功能:
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceFeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceFeignApplication.class, args);
    }
}


定义一个feign接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了service-hi服务的“/hi”接口,代码如下:

@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 来消费服务。代码如下:

@RestController
public class HiController {

    @Autowired
    SchedualServiceHi schedualServiceHi;
    @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


Feign源码解析:http://blog.csdn.net/forezp/article/details/73480304

转自:http://blog.csdn.net/forezp/article/details/69808079
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    SpringCloudLearning_forezp.tar.gz

    史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)(Finchley版本) 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)(Finchley版本) 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)...

    springCloud项目练习

    第三课: 服务消费者(Feign) 第四课: 断路器(Hystrix) 第五课: 路由网关(zuul) 第六课: 分布式配置中心(Spring Cloud Config) 第七课: 高可用的分布式配置中心(Spring Cloud Config) 第八课: 消息总线...

    SpringCloud第3季2024.7z

    本资源"SpringCloud第3季2024.7z"很可能包含的是关于SpringCloud最新版本的教程或资料,可能涵盖了一些最新的特性和最佳实践。 1. **服务发现**:SpringCloud使用Eureka作为默认的服务注册与发现组件。服务提供者向...

    (代码)SpringCloud第07讲:Http模板化客户端Feign

    Feign的设计灵感来源于Netflix,其核心功能是作为服务消费者之间的代理,提供了一种接口化的调用方式,让服务调用如同调用本地方法一样简单。 在Spring Cloud体系中,微服务间的通信通常有多种方式,如Ribbon和...

    spring cloud视频教程

    Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具包,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)...

    Spring Cloud 学习笔记.pdf

    Hystrix是一个延迟和容错库,旨在隔离访问远程系统、服务和第三方库,停止级联失败,并提供后备选项。它提供了熔断、线程隔离、信号量隔离、超时机制、并发数限制、请求缓存、请求合并等容错功能。Hystrix通过仪表板...

    spring cloud 微服务简单框架

    6. **Spring Cloud Hystrix**:Hystrix 是一个延迟和容错库,用于隔离访问远程服务、第三方库,防止级联失败,增加系统的弹性。在微服务架构中,当一个服务不可用时,Hystrix 可以提供降级策略,保证系统的稳定。 7...

    尚硅谷最新springcloud高清视频

    2. **Hystrix**:是一种容错库,旨在通过添加延迟容忍性和容错逻辑来隔离远程系统、服务和第三方库的访问点,当出现故障时可以快速响应而不是长时间等待或者完全失败。 3. **Zuul**:作为边缘服务应用运行在一个或多...

    springcloud项目Demo

    Eureka是Netflix开源的服务发现组件,服务提供者将自身注册到Eureka Server,服务消费者则通过Eureka Server获取服务提供者的信息,实现服务间的通信。 2. **Zuul**:边缘服务和API网关。Zuul作为微服务架构的入口...

    从零开始搭建SpringCloud第二节源码及截图

    7. **创建服务消费者**:创建一个服务消费者应用,利用 Ribbon 或 Feign 进行服务调用。 8. **测试和验证**:启动所有应用,查看Eureka Server管理界面确认服务注册成功,然后进行服务调用测试。 **四、截图解析**...

    SpringCloud简单项目,附带建表sql(生产者消费者注册中心搭建成功,项目可以成功启动)

    在SpringCloud中,服务消费者通常使用`Feign`或`RestTemplate`来实现远程调用。 3. **注册中心**:SpringCloud使用Eureka作为服务注册与发现的组件。每个服务启动后,都会向Eureka注册自己的元数据信息,包括服务名...

    springcloud-demo-master_spring-cloud_cloud_

    3. **Eureka**: Spring Cloud的服务注册与发现组件,服务提供者将自身注册到Eureka Server,服务消费者通过Eureka获取服务提供者的地址。 4. **Zuul**: 作为Spring Cloud的API网关,负责请求的路由转发、过滤和安全...

    springcloud生产者消费者商城支付源代码

    在本项目中,"springcloud生产者消费者商城支付源代码" 是一个基于Spring Cloud框架构建的电子商务系统的实现,主要用于演示和学习如何运用生产者-消费者模式处理支付相关的业务逻辑。这个系统包含了多个关键模块,...

    想学习的看过来了spring4.0、springboot、springcloud详细视频课程(硅谷)

    19.硅谷学习_SpringCloud_Rest微服务案例-部门服务消费者 20.硅谷学习_SpringCloud_Eureka是什么 21.硅谷学习_SpringCloud_EurekaServer服务注册中心建立 22.硅谷学习_SpringCloud_将已有的部门微服务注册进...

    从零开始搭建SpringCloud第三节源码及截图

    3. 配置服务消费者调用服务提供者的方法,例如使用Feign客户端。 **步骤五:源码分析** 在搭建过程中,我们可以查看源码来理解SpringCloud内部的工作原理。例如,Eureka Server的注册与心跳机制,Ribbon的负载均衡...

    spring-cloud.pdf

    Spring Cloud由多个模块组成,包括Spring Cloud Context, Spring Cloud Commons, Spring Cloud LoadBalancer, Spring Cloud CircuitBreaker, ConfigurationProperties, Spring Cloud Config, Spring Cloud Netflix, ...

    spring boot+spring cloud视频教学下载全套

    ├4 服务提供者与服务消费者new.avi ├40 6.11-1 Zuul过滤器.avi ├41 6.11-2禁用Zuul的过滤器.avi ├42 7.1 Spring Cloud Config简介.avi ├43 7.2 编写Config Server.avi ├44 7.3 编写Config Client.avi ├45 7.4...

    Spring Cloud 中文文档 参考手册 中文版2018

    此外,Spring Cloud Config支持使用Vault等第三方安全存储来管理敏感信息。 Spring Cloud Netflix是另一个关键组件,它提供了Eureka用于服务发现,Ribbon用于客户端负载均衡,Hystrix用于断路器模式,Feign用于声明...

    最新企业级SpringCloud架构视频课程下载整理.zip

    3. **Hystrix**:断路器,用于隔离调用服务和第三方库,防止级联故障,提高系统的容错性。 4. **Feign**:声明式Web服务客户端,简化了服务间的调用,使得编写Web服务客户端就像编写Java方法一样简单。 5. **...

    SpringCloud项目练习

    了解如何配置Eureka客户端,以及如何处理服务的健康检查和心跳机制,是使用SpringCloud的第一步。 2. **Zuul边缘服务与API网关**: Zuul是SpringCloud中的API网关,负责路由转发、过滤器处理以及服务的聚合。学习...

Global site tag (gtag.js) - Google Analytics