`
郑云飞
  • 浏览: 817859 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

跟我学SpringCloud教程 | 第三篇: 服务消费者(Feign)

 
阅读更多

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

五、参考资料

spring-cloud-feign

 

分享到:
评论

相关推荐

    SpringCloudLearning_forezp.tar.gz

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

    springCloud项目练习

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

    springcloud feign 服务消费者 类似 webservice

    总之,Spring Cloud Feign为微服务架构中的服务消费者提供了优雅的调用方式,降低了开发复杂性,提高了代码的可读性和可维护性。通过合理的配置和使用,我们可以构建出高可用、高并发的分布式系统。

    spring cloud视频教程

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

    SpringCloud-创建服务消费者-Feign方式示例代码.zip

    在这个名为"SpringCloud-创建服务消费者-Feign方式示例代码.zip"的压缩包中,我们预计将看到一个简单的Spring Cloud应用,该应用展示了如何利用Feign作为服务消费者来调用其他服务。 首先,让我们了解Feign的基本...

    springcloud - 2021.0.3版本 - (一)服务注册nacos+feign

    在本教程中,我们将深入探讨如何使用Spring Cloud的2021.0.3版本,集成Nacos作为服务注册中心,并实现Feign客户端调用。Spring Cloud是一个强大的框架,用于构建分布式系统,如微服务架构,而Nacos是阿里巴巴开源的...

    SpringCloud第3季2024.7z

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

    springcloud-alibaba服务注册发现整合feign:webflux调用

    3. **启用 Feign**:在服务消费者的配置类上添加 `@EnableFeignClients` 注解,启用 Feign 功能。 4. **定义 Feign 接口**:创建一个接口,用 `@FeignClient` 注解指定服务提供者的名称,然后在这个接口上定义要...

    7天学会spring cloud教程.pdf.zip

    《7天学会Spring Cloud教程》是一本专注于快速掌握微服务框架Spring Cloud的实践指南。Spring Cloud作为Java领域的主流微服务框架,为企业级分布式应用提供了全面的解决方案,包括服务发现、配置中心、负载均衡、...

    SpringCloud基础教程

    本基础教程旨在帮助初学者全面理解并掌握SpringCloud的核心概念和技术,通过实践源码与配套文档,深入学习其工作原理和应用方式。 首先,我们需要了解SpringCloud的基础架构,它由多个子项目组成,如Eureka(服务...

    SpringCloud服务消费者(Ribbon+Feign)原理及示例

    本文主要探讨了在SpringCloud中如何使用Ribbon和Feign作为服务消费者的组件,以及它们背后的负载均衡原理。首先,理解服务间通信的基础是HTTP协议,而注册中心Eureka则负责维护服务实例的列表。 Ribbon和Feign都是...

    spring cloud feign demo

    Spring Cloud Feign 是一个声明式的 Web 服务客户端,它使得编写 Web 服务客户端变得简单。Feign 让消费者能够以一种声明式的方式定义接口,这些接口将被自动映射到 HTTP 请求。它整合了 Ribbon 和 Eureka,可以方便...

    springcloud-feign.zip

    springcloud整合openFeign,包括feign的基本使用、传参、指定特定的服务器、负载均衡等使用方法。 模块有: springcloud-feign-api springcloud-feign-consumer springcloud-feign-provider springcloud-feign-...

    微服务springcloud之feign使用demo

    除了Feign自带的注解外它还支持JAX-RS注解,SpringCloud又为Feign增加了对SpringMVC注解的支持,同时为了能够使用和Spring Web中默认使用的相同的httpMessageConverter,SpringCloud集成了Ribbon和Eureka,用来在...

    springcloud教程源码 springcloud demo

    课程的源码是尚硅谷的springcloud教程源码,SpringCloud各种核心组件,到最终的微服务架构总结,帮助大家快速入门、上手并精通微服务框架SpringCloud。 课程中对比了 Dubbo 和 SpringCloud,并深入讲授SpringCloud...

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

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

    spring cloud eureka zuul ribbon hystrix feign config 示例

    3. **Ribbon**:Ribbon是Netflix的客户端负载均衡器,它作为一个内嵌的组件被包含在服务消费者中。当服务消费者需要调用服务提供者时,Ribbon会根据Eureka获取的服务列表进行负载均衡,选择一个合适的实例进行请求。...

    Spring Cloud 之 Eureka集群整合Zuul、Feign-源码

    在本教程中,我们将深入探讨如何在Spring Cloud框架下实现Eureka集群,并整合Zuul和Feign。首先,我们要理解这些组件的核心功能。 **Eureka**是Spring Cloud中的服务发现组件,它允许微服务之间互相发现并进行通信...

    Spring Cloud Feign统一设置验证token实现方法解析

    Spring Cloud Feign统一设置验证token实现方法解析 Spring Cloud Feign是一个基于Netflix的Feign组件,提供了一个简洁的方式来构建RESTful风格的微服务接口。Feign组件提供了一个统一的接口调用方式,使得微服务...

    SpringCloud之Feign

    - **Feign接口**: 在Feign中,服务消费者通过定义一个接口来描述远程调用,这个接口会带有注解,注解中包含了服务提供者的地址和服务接口等信息。 - **Feign Client**: 实现了HTTP客户端的功能,根据Feign接口生成...

Global site tag (gtag.js) - Google Analytics