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

SpringClould服务与消费者Feign

 
阅读更多

上一篇文章,讲述了如何通过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 q q 号: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 q q 群: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

 

分享到:
评论

相关推荐

    springcloud feign 服务消费者 类似 webservice

    Feign的设计灵感来源于Netflix的Feign库,它的主要目的是简化微服务之间的通信,使得开发者可以像定义接口一样调用远程服务,从而降低了服务消费者与提供者的耦合度。 在传统的Web Service(WebService)中,我们...

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

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

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

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

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

    在整合 Feign 和 WebFlux 时,我们需要确保服务提供者的接口是基于 WebFlux 实现的,这样才能保证在服务消费者端使用 Feign 进行调用时,能够正确地处理非阻塞的响应式请求。 具体实现步骤如下: 1. **引入依赖**...

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

    本示例代码着重讲解如何利用Ribbon创建服务消费者,结合Eureka实现服务发现。Eureka是Netflix开源的服务注册与发现工具,它使得微服务之间能够互相找到并进行通信。 首先,我们需要理解Spring Cloud Eureka的工作...

    feign以XML格式传输-技术点eureka-feign-jackson.zip

    在服务消费者端,当调用服务提供者的API时,Feign会自动使用配置好的Jackson XML序列化器将Java对象转换为XML格式,然后发送请求。服务提供者接收到XML数据后,同样可以通过Jackson反序列化回Java对象。 此外,...

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

    4. 在服务消费者应用启动类中启用Feign客户端,添加@EnableFeignClients注解。 步骤六:测试 1. 先启动Nacos服务器,然后依次启动服务提供者和消费者应用。 2. 服务消费者通过Feign接口调用服务提供者的功能,验证...

    eureka 客户端-服务消费者

    在这个"eureka 客户端-服务消费者"的示例中,我们将深入探讨如何使用 Spring Boot 和 Spring Cloud 的最新版本来实现基于 Feign 的服务消费者。 1. **Eureka 服务注册与发现** Eureka 是 Netflix 开源的一个基于 ...

    spring cloud feign实现远程调用服务传输文件的方法

    我们的实践案例包括两个项目:服务提供者项目 upload-service 和调用服务项目 upload-client。upload-service 负责提供文件上传服务,而 upload-client 负责调用 upload-service 实现文件上传功能。 upload-service...

    SpringCloud之Feign

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

    feign-demo.7z

    另一个是服务消费者(Consumer),通过Feign调用服务提供者的接口。 - "feign-demo"可能包含了这两个模块的相关代码,如启动类、配置文件、服务接口定义等。 6. **测试与运行**: - 开发完成后,需要确保Eureka ...

    springcloud应用之feign

    在Spring Cloud应用中,Feign、Ribbon和Eureka三者共同作用于服务间的通信: - **Eureka**:作为服务注册中心,维护着所有微服务实例的信息,每个微服务启动时都会向Eureka注册,提供服务发现功能。 - **Feign**:...

    SpringCloud使用Feign做断路由

    Feign允许我们将HTTP请求的定义与服务调用逻辑解耦,通过注解和接口定义,我们可以创建一个服务消费者,就像调用本地方法一样调用远程服务。Feign还支持Hystrix断路器,当服务不可用或响应时间过长时,Hystrix可以...

    应用Spring Cloud创建一个服务提供者和消费者

    6. **配置Feign**:在服务消费者的配置中,指定Eureka作为服务发现客户端,并启用Feign。在Feign接口中,定义与服务提供者相同的HTTP方法和URL。 7. **测试应用**:启动服务提供者和消费者,然后通过服务消费者调用...

    springcloud feign整合hystrix(服务降级).doc

    通过以上步骤,我们就能实现Spring Cloud Feign与Hystrix的整合,为服务调用添加了容错保护,增强了系统的健壮性。在微服务架构中,这种服务间调用的健壮性设计是至关重要的,能够帮助我们构建出更稳定、更可靠的...

    手写RPC框架Feign

    Feign的设计理念是通过简单的接口定义来封装服务调用,让开发者能够专注于业务逻辑,而不是底层网络通信的细节。 在开始了解Feign之前,我们先理解RPC的概念。RPC允许一个程序调用另一个运行在不同机器上的程序,就...

    Finn之 SpringCloud2.0教程全集(四)- 服务消费者(Feign + ribbon)

    Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级...Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。

    feign+springboot的使用

    Feign 是一个声明式的 Web 服务客户端,它可以使得 Web 服务客户端的写入更加方便。Feign 结合 Eureka 注册中心,把不同的服务项目注册到 Eureka 中,通过 Feign 客户端进行调用,可以解决负载均衡问题。 一、Feign...

    Feign的使用案例

    这个"Feigndemo02"可能包含了实现以上功能的示例代码,包括服务提供者和服务消费者端的配置、接口定义以及实际调用。通过分析这些代码,你可以更深入地理解Feign的工作原理和使用方式。 总结起来,Spring Cloud ...

    spring cloud eureka微服务之——服务注册发现、服务消费者,服务提供者简单实例

    在服务消费者的业务逻辑中,使用RestTemplate或Feign等工具,发起HTTP请求调用服务提供者。 4. **运行和测试**:启动Eureka Server,然后依次启动服务提供者和服务消费者。通过服务消费者调用服务提供者的接口,...

Global site tag (gtag.js) - Google Analytics