(05)SpringCloud实战之Feign负载均衡

  一、概述

  1、官方解释

  Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

  通俗的说,Feign是一个声明式的Web服务客户端,使得编写Web服务客户端变得非常容易,只需要创建一个接口,然后在上面添加注解即可。源码地址

  2、Feign能干什么

  Feign旨在使编写Java Http客户端变得更容易。前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用Spring cloud Ribbon时,自动封装服务调用客户端的开发量。Feign集成了Ribbon,利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。

  二、Feign使用步骤

  1、参考80微服务构建microservicecloud-consumer-dept-feign

  (1)pom.xml文件与80相比增加feign的依赖

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

  (2)application.yml 拷贝80的

  (3)新建主启动类DeptConsumer80_Feign_App.java,并添加如下注解

package com.atguigu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages= {"com.atguigu.springcloud"})
@ComponentScan("com.atguigu.springcloud")
public class DeptConsumer80_Feign_App
{
  public static void main(String[] args)
  {
   SpringApplication.run(DeptConsumer80_Feign_App.class, args);
  }
}

  2、修改微服务 microservicecloud-api

  (1)pom.xml文件增加feign依赖

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

  (2)新添加接口 DeptClientService.java

package com.atguigu.springcloud.service;

import java.util.List;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.atguigu.springcloud.entities.Dept;

@FeignClient(value = "MICROSERVICECLOUD-DEPT")
public interface DeptClientService {

    @RequestMapping(value = "/dept/get/{id}",method = RequestMethod.GET)
    public Dept get(@PathVariable("id") long id);

    @RequestMapping(value = "/dept/list",method = RequestMethod.GET)
    public List<Dept> list();

    @RequestMapping(value = "/dept/add",method = RequestMethod.POST)
    public boolean add(Dept dept);
}

  (3)执行 clean install 构建jar包

  3、微服务 microservicecloud-consumer-dept-feign 新建 DeptController_Feign.java

package com.atguigu.springcloud.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.atguigu.springcloud.entities.Dept;
import com.atguigu.springcloud.service.DeptClientService;

@RestController
public class DeptController_Feign
{
  @Autowired
  private DeptClientService service = null;

  @RequestMapping(value = "/consumer/dept/get/{id}")
  public Dept get(@PathVariable("id") Long id)
  {
   return this.service.get(id);
  }

  @RequestMapping(value = "/consumer/dept/list")
  public List<Dept> list()
  {
   return this.service.list();
  }

  @RequestMapping(value = "/consumer/dept/add")
  public Object add(Dept dept)
  {
   return this.service.add(dept);
  }
}

  4、启动 eureka、3个微服务实例、启动Feign,输入 http://localhost/consumer/dept/list 测试成功

  Feign通过接口的方法调用Rest服务(之前是Ribbon+RestTemplate),该请求发送给Eureka服务器(http://MICROSERVICECLOUD-DEPT/dept/list),通过Feign直接找到服务接口,由于在进行服务调用的时候融合了Ribbon技术,所以也支持负载均衡作用。

原文地址:https://www.cnblogs.com/javasl/p/12516655.html

时间: 2024-09-29 01:01:56

(05)SpringCloud实战之Feign负载均衡的相关文章

SpringCloud学习系列-Feign负载均衡(2)

Feign使用步骤 1.参考microservicecloud-consumer-dept-80   新建microservicecloud-consumer-dept-feign 修改主启动类名字DeptConsumer80_Feign_App 2.microservicecloud-consumer-dept-feign工程pom.xml修改,主要添加对feign的支持 <dependency> <groupId>org.springframework.cloud</gr

SpringCloud学习(5)——Feign负载均衡

Feign概述 Feign是声明式的Web服务客户端, 使得编写Web服务客户端变的非常容易, 只需要创建一个接口, 然后在上面添加注解即可. Feign旨在使编写Java Http客户端变的更容易. 在使用Ribbon+RestTemplate时, 利用RestTemplate对http请求的封装处理, 形成了一套模板化的调用方法.但是在实际开发中, 由于对服务依赖的调用可能不止一处, 往往一个接口会被多出调用, 所以通常都会针对每个微服务自行封装一些客户端类来包装这些以来服务的调用.所以Fe

springcloud的两种负载均衡策略

前言: 之前写了通过Ribbon+RestTemplate实现调用服务,此处我再系统的说一下两者的区别 一.springcloud的负载均衡策略 1.Ribbon 是基于Netflix Ribbon实现的一套客户端 负载均衡的工具,类似Nginx主要功能时提供客户端的软件负载均衡算法LB就是负载均衡,集中式(F5),进程内(Nginx),消费者可以自动看从Eureka中拿到对应的服务列表,默认进行轮询RoundRobinRule 下图是RestTemplate的自带的7中均衡策略 我们在之前通过

大数据高并发系统架构实战方案(LVS负载均衡、Nginx、共享存储、海量数据、队列缓存)

课程简介: 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练. 通过该课程的学习,普通的技术人员就可以快速搭建起千万级的高并发大数据网站平台. 亮点一:真实环境还原,课程采用了VM环境重现大网站集群服务器环境,真实环境还原再现. 亮点二:基础实用,细节决定成败,课程内容在演练过程中重点介绍各种细节,保证初级人员快速入门及高级进阶. 亮点三:讲师丰富的海量平台运作经验 讲师tom5多

项目实战2—LVS负载均衡

负载均衡集群企业级应用实战-LVS 实现基于LVS负载均衡集群的电商网站架构 随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法承载更多的用户访问,此时需要用负载均衡技术,对网站容量进行扩充,来解决承载的问题.scale out? scale up? 实现基于LVS负载均衡集群的电商网站架构 前景:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3

springcloud 之Ribbon客户端负载均衡配置使用

pom.xml添加配置说明:这里服务注册与发现用的是Eureka,所以消费者端需要引入eureka,使用EurekaClient来调用服务 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <g

SpringCloud(六)Ribbon的负载均衡(一)

Ribbon 何为负载均衡? 负载均衡在系统架构中是一个非常重要,并且是不得不去实施的内容.因为负载均衡是对系统的高可用.网络压力的缓解和处理能力扩容的重要手段之一.我们通常所说的负载均衡都指的是服务端负载均衡,其中分为硬件负载均衡和软件负载均衡.硬件负载均衡主要通过在服务器节点之间按照专门用于负载均衡的设备,比如F5等:而软件负载均衡则是通过在服务器上安装一些用于负载均衡功能或模块等软件来完成请求分发工作,比如Nginx等.不论采用硬件负载均衡还是软件负载均衡,只要是服务端都能以类似下图的架构

SpringCloud Ribbon组成和负载均衡规则

### Ribbon饥饿加载 > 默认情况下Ribbon是懒加载的.当服务起动好之后,第一次请求是非常慢的,第二次之后就快很多. #### 解决方式:开启饥饿加载 ```yml ribbon: eager-load: enabled: true #开启饥饿加载 clients: server-1,server-2,server-3 #为哪些服务的名称开启饥饿加载,多个用逗号分隔 ``` ### Ribbon组成 | 接口 | 作用 | 默认值 | | ------------ | -------

Feign负载均衡(客户端)

Feign是一个声明式的Web Service客户端,比Ribbon好用,默认也是轮巡.我们只需要使用Feign创建一个接口,并用注解就好了. 案例编写:  一:搭建Eureka服务器 目录结构: 1.1导入依赖包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=