`

Feign声明式服务调用

阅读更多
1. Feign声明式服务调用简介

Feign是一个声明式的Web Service客户端,它使得编写Web Serivce客户端变得更加简单。我们只需要使用Feign来创建一个接口并用注解来配置它既可完成。
它具备可插拔的注解支持,包括Feign注解和JAX-RS注解。Feign也支持可插拔的编码器和解码器。
Spring Cloud为Feign增加了对Spring MVC注解的支持,还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。

前面Ribbon调用服务提供者,通过restTemplate调用,缺点是,多个地方调用,同一个请求要写多次,不方便统一维护。
这时候使用Feign,就直接把请求统一搞一个service作为FeignClient,然后其他调用Controller需要用到的,直接注入service,直接调用service方法即可;
同时Feign整合了Ribbon和Eureka,所以要配置负载均衡的话,直接配置Ribbon即可,无其他特殊地方;当然Fiegn也整合了服务容错保护,断路器Hystrix。


2. Feign应用

2.1) 公共模块项目microservice-common的pom.xml增加feign依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>


2.2) 公共模块项目microservice-common中新建service,定义了FeignClient,同时指定了调用的服务名称MICROSERVICE-STUDEN

package com.andrew.service;

import java.util.List;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import com.andrew.entity.Student;

@FeignClient(value = "MICROSERVICE-STUDENT")
public interface StudentClientService {
    @GetMapping(value = "/student/get/{id}")
    public Student get(@PathVariable("id") Integer id);
    @GetMapping(value = "/student/list")
    public List<Student> list();
    @PostMapping(value = "/student/save")
    public boolean save(Student student);
    @GetMapping(value = "/student/delete/{id}")
    public boolean delete(@PathVariable("id") Integer id);
}


2.3) 重新打包microservice-common

修改microservice-common
首先maven clean
然后maven install


2.4) 服务消费者项目microservice-student-consumer-feign-80搭建

new -> Maven Module
    -> create a simple project
Module Name:microservice-student-consumer-feign-80
Parent Project:microservice
Working set:SpringCloud
    -> Artifact
Group Id:com.andrew.springcloud
Artifact Id:microservice-student-consumer-feign-80
Version:0.0.1-SNAPSHOT
Packaging:jar

代码与microservice-student-consumer-80相同


2.5) 服务消费者项目microservice-student-consumer-feign-80的pom.xml增加Feign依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>


2.6) 服务消费者项目microservice-student-consumer-feign-80修改启动类为StudentConsumerFeignApplication_80.java同时增加注解@EnableFeignClients

package com.andrew;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
@EnableEurekaClient
@EnableFeignClients
public class StudentConsumerFeignApplication_80 {
    public static void main(String[] args) {
        SpringApplication.run(StudentConsumerFeignApplication_80.class, args);
    }
}


2.7) 服务消费者项目microservice-student-consumer-feign-80修改StudentConsumerFeignController.java,把restTemplate去掉,改成注入service,调用service方法来实现服务的调用

package com.andrew.controller;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.andrew.entity.Student;
import com.andrew.service.StudentClientService;
 
@RestController
@RequestMapping("/student")
public class StudentConsumerFeignController {
    @Autowired
    private StudentClientService studentClientService;
    @PostMapping(value="/save")
    public boolean save(Student student){
        return studentClientService.save(student);
    }
    @GetMapping(value="/list")
    public List<Student> list(){
        return studentClientService.list();
    }
    @GetMapping(value="/get/{id}")
    public Student get(@PathVariable("id") Integer id){
        return studentClientService.get(id);
    }
    @GetMapping(value="/delete/{id}")
    public boolean delete(@PathVariable("id") Integer id){
        return studentClientService.delete(id);
    }
}


启动microservice-eureka-server-2001
启动microservice-eureka-server-2002
启动microservice-eureka-server-2003
启动microservice-student-provider-1001
启动microservice-student-provider-1002
启动microservice-student-provider-1003

先测试服务提供者:
http://localhost:1001/student/list
http://localhost:1002/student/list
http://localhost:1003/student/list

再测试下 eureka:
http://eureka2001.andrew.com:2001/
http://eureka2002.andrew.com:2002/
http://eureka2003.andrew.com:2003/

然后再启动服务消费者
microservice-student-consumer-feign-80
http://localhost/student/list
list----------------------------------1001 - 1003随机调用
[{"id":1,"name":"zhangsan","grade":"11"},{"id":2,"name":"lisi","grade":"12"},{"id":3,"name":"wangwu","grade":"13"},{"id":4,"name":"student04","grade":"14"},{"id":5,"name":null,"grade":null},{"id":6,"name":"student06","grade":"16"}]
分享到:
评论

相关推荐

    SpringCloud实战之Feign声明式服务调用

    Feign 声明式服务调用详解 Feign 是一个声明式的 Web Service 客户端,它的目的就是让 Web Service 调用更加简单。Feign 提供了 HTTP 请求的模板,通过编写简单的接口和插入注解,就可以定义好 HTTP 请求的参数、...

    (源码)基于Spring Cloud框架的微服务调用与熔断管理系统.zip

    通过集成Feign、Hystrix和Gateway等组件,实现了服务间的声明式调用、熔断降级、网关路由等功能,确保微服务架构的稳定性和高效性。 ## 项目的主要特性和功能 ### 1. Feign声明式服务调用 Feign概述Feign是一个...

    图解Feign源码-Feign是如何实现声明式调用的

    Feign声明式调用源码解析 Feign是Spring Cloud中的一个轻量级的声明式RESTful客户端,主要用于简化微服务之间的调用过程。在本文中,我们将深入探讨Feign的源码,了解Feign如何实现声明式调用的。 一、Feign的工作...

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

    Spring Cloud Feign 实现远程调用服务传输文件的方法 在微服务架构中,服务之间的调用和文件传输是非常常见的场景。Spring Cloud Feign 是一个基于 Java 的声明式 RESTful 客户端,提供了一种简单、可靠的方式来...

    SpringCloud案例(集成了Eureka、Ribbon、Feign)

    总结来说,Spring Cloud的这套组合拳——Eureka服务发现,Ribbon客户端负载均衡,以及Feign声明式服务调用,为构建高可用、松耦合的微服务系统提供了强大支持。通过实践这个案例,开发者可以深入理解这些组件的原理...

    05Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用1

    这样,Feign 客户端可以在调用服务时,自动选择最优的服务提供方,并在服务调用失败时,自动 fallback 到备用的服务提供方。 总结 Spring Cloud OpenFeign 是一个功能强大的声明式服务调用工具,集成了 Ribbon 和 ...

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

    接下来,Feign 是一个声明式的 HTTP 客户端,它使得编写 Web 服务客户端变得简单。在 Spring Cloud 中,Spring Cloud OpenFeign 扩展了这一功能,允许开发者通过注解定义接口,自动构建和执行 HTTP 请求。在整合 ...

    springcloud入门代码基于Spring Cloud实现的声明式服务调用框架 Feign演示代码

    在本项目中,我们主要探讨的是如何利用Spring Cloud框架中的Feign组件进行声明式服务调用,这在微服务架构中是非常重要的一环。Feign是Spring Cloud提供的一种声明式Web服务客户端,它使得构建与使用Web服务客户端变...

    SpringCloud基础概念与入门+SpringCloud核心组件Eureka服务注册与发现等全套教程

    SpringCloud核心组件Feign声明式服务调用 SpringCloud核心组件Hystrix断路器与容错机制 SpringCloud核心组件ZuulAPI网关 SpringCloud核心组件Config分布式配置中心 SpringCloud核心组件Bus消息总线 SpringCloud核心...

    SpringCloud+微服务架构+核心组件+案例

    SpringCloud核心组件Feign声明式服务调用 SpringCloud核心组件Hystrix断路器与容错机制 SpringCloud核心组件ZuulAPI网关 SpringCloud核心组件Config分布式配置中心 SpringCloud核心组件Bus消息总线 SpringCloud...

    springcloud feign 服务消费者 类似 webservice

    Spring Cloud Feign是Spring Cloud生态系统中的一个组件,它作为一个声明式的服务调用客户端,使得编写Web服务客户端变得简单。Feign的设计灵感来源于Netflix的Feign库,它的主要目的是简化微服务之间的通信,使得...

    基于Spring Cloud的rk-cloud微服务架构设计源码

    技术选型包括Spring Eureka服务注册与发现、Spring Config配置中心、Spring MongoDB MongoDB支持、Spring Redis Redis支持、Spring Zuul网关、Spring Hystrix熔断器、Spring Feign声明式服务调用以及Spring Ribbon...

    SpringBoot使用Feign调用第三方接口Demo.zip

    Feign是一个声明式Web服务客户端,它使得编写Web服务客户端变得简单,它的工作原理是通过创建一个接口并添加注解来定义服务接口,然后Feign会自动生成实现该接口的HTTP客户端。 在这个"SpringBoot使用Feign调用第三...

    第五章 SpringCloud 使用Feign调用服务.pdf

    通过以上步骤,我们完成了服务调用者(user-service)对Feign的集成,实现了对服务提供者(message-service)的声明式调用。这种方式不仅使代码更简洁,而且由于Feign内部集成了Ribbon进行负载均衡,所以调用过程也...

    springcloud feign服务间的相互调用.doc

    Spring Cloud Feign 是一个基于 annotations 的声明式 RESTful 客户端,它提供了对服务间调用的一种简单而高效的解决方案。在本文中,我们将基于 Spring Cloud Feign来实现服务间的相互调用。 首先,让我们来创建一...

    SpringCloud学习代码

    5. **Feign声明式服务调用** Feign是一个声明式的HTTP客户端,简化了服务间的调用。在"SpringCloud学习代码"中,你可以找到如何定义Feign接口,以及如何注入Eureka Client实现服务发现。 6. **Spring Cloud Config...

    spring cloud feign方式使用服务

    通过Ribbon,Feign会在调用服务时自动选择一个可用的实例。 4.2 Hystrix集成 Feign还集成了Hystrix,提供了熔断、降级和隔离策略,增强了服务调用的健壮性。当服务调用失败时,Hystrix可以避免服务雪崩,保证系统的...

    基于spring cloud+mybatis 案例源码.rar

    7. **Feign声明式服务调用** Spring Cloud Feign是基于Netflix Feign实现的声明式Web服务客户端,它使得编写Web服务客户端变得更加简单。在本案例中,可能使用Feign来声明式地调用提供数据库服务的微服务。 8. **...

    SpringCloud学习笔记(十)声明式客户端Feign的简单调用 源码包

    在Spring Cloud生态系统中,Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得简单。Feign的设计灵感来源于Netflix,旨在提供一个更高级别的、更面向接口的HTTP客户端抽象,使得开发者能够更加专注于...

    springcloud学习资料.rar

    5. **Feign声明式服务调用**:Feign是一个基于Java和JVM的声明式Web服务客户端,它使得编写Web服务客户端变得更简单,通过注解定义接口,Feign能自动生成实现代码,实现服务调用。 6. **Spring Cloud Config**:...

Global site tag (gtag.js) - Google Analytics