首页 > 其他分享 >Feign负载均衡

Feign负载均衡

时间:2022-09-24 14:34:12浏览次数:62  
标签:Feign springcloud 负载 接口 dept 均衡 public Ribbon

feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用 service。

Spring Cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。

只需要创建一个接口,然后添加注解即可!

feign ,主要是社区,大家都习惯面向接口编程。这个是很多开发人员的规范。

调用微服务访问两种方法

1. 微服务名字 【ribbon】

2. 接口和注解 【feign 】

 

Feign能干什么?

Feign旨在使编写Java Http客户端变得更容易

前面在使用Ribbon + RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套模 板化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以, Feign在此基础上做了进一步封装,由他 来帮助我们定义和实现依赖服务接口的定义,在Feign的实 现下,我们只需要创建一个接口并使用注解的方式来配置它(类似于以前Dao接口上标注Mapper 注解,现在是一个微服务接口上面标注一个Feign注解即可。)即可完成对服务提供方的接口绑 定,简化了使用Spring Cloud Ribbon时,自动封装服务调用客户端的开发量。

 

Feign集成了Ribbon

利用Ribbon维护了springcloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡, 而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而且简单的实 现了服务调用

 

 

  1. 新建springcloud-consumer-dept-feign-80
  2. 将springcloud-consumer-dept-80的内容都拷贝到 feign项目中
  3. 删除myrule文件夹
  4. 修改主启动类的名称为 DeptConsumerFeign80

添加pom依赖

<!--Feign相关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>

修改springcloud-api工程,新建service包创建DeptClientService接口

@Component
@FeignClient(value="SPRINGCLOUD-PROVIDER-DEPT",fallbackFactory = DeptClientServiceFallbackFactory.class)
public interface DeptClientService {
    @GetMapping("/dept/get/{id}")
    public Dept queryById(@PathVariable("id") Long id); //根据id查询部门
    @GetMapping("/dept/list")
    public List<Dept> queryAll(); //查询所有部门
    @PostMapping(value = "/dept/add")
    public boolean addDept(Dept dept); //添加一个部门
}

springcloud-consumer-dept-feign-80工程修改Controller,并添加上一步新建的DeptClientService

package com.xflsh.springcloud.controller;

import com.xflsh.springcloud.pojo.Dept;
import com.xflsh.springcloud.service.DeptClientService;
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 org.springframework.web.client.RestTemplate;

import java.util.List;

@RestController
public class DeptConsumerController {
    //理解:消费者,不应该有service层
// 使用RestTemplate访问restful接口非常的简单粗暴且无脑
// (url,requestMap,ResponseBean.class) 这三个参数分别代表
// REST请求地址,请求参数,Http响应转换 被 转换成的对象类型

    @Autowired
    private DeptClientService service=null;

    @RequestMapping("/consumer/dept/add")
    public boolean add(Dept dept){
        return
                this.service.addDept(dept);
    }
    @RequestMapping("/consumer/dept/get/{id}")
    public Dept get(@PathVariable("id") Long id){
        return
                this.service.queryById(id);
    }
    @RequestMapping("/consumer/dept/list")
    public List<Dept> list(){
        return
                this.service.queryAll();
    }
}

springcloud-consumer-fegin-dept-80工程修改主启动类添加 @EnableFeignClients 的注解

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

 

小结

Ribbon和Feign区别

Ribbon和Feign都是用于调用其他服务的,不过方式不同。

Ribbon: RestFul风格

Feign: 面向接口

  • 启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。
  • 服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
  • 调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。

Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,

不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

 

标签:Feign,springcloud,负载,接口,dept,均衡,public,Ribbon
From: https://www.cnblogs.com/flsh/p/16725593.html

相关文章

  • Feign的简单介绍及配置参数
    contextId用于区分实例,类似beanName......
  • feign.RetryableException: iZuf627hz8vloz1wtzgxzdZ executing GET http://ip-servic
    问题就是通过feign调用接口的时候,去注册中心获取服务位置的时候,拿了服务器的实例名,这是微服务没法处理服务提供者这样配置eureka.instance.prefer-ip-address=trueeure......
  • The bean 'ip-service.FeignClientSpecification' could not be registered. A bean w
    idea建议Considerrenamingoneofthebeansorenablingoverridingbysettingspring.main.allow-bean-definition-overriding=true使用改方案,可能会导致后加载的bea......
  • Ribbon负载均衡
    Ribbon Ribbon是什么?SpringCloudRibbon是基于NetflixRibbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件......
  • 【Nacos】最新版本 Spring Cloud Alibaba nacos 负载均衡调用异常 没有找到对应主机
    问题原因:最新版本的Nacos中没有依赖任何负载均衡的包,解决办法:需要手动引入Ribbon或者LoadBalancer,这里建议引入LoadBalancer,因为Ribbon已经处于维护状态......
  • 负载均衡
    什么是负载均衡在实际项目中,一个服务基本都是集群模式的,也就是多个功能相同的项目在运行,这样才能承受更高的并发这时一个请求到这个服务,就需要确定访问哪一个服务器......
  • 22.OpenFeign调用第三方服务 (重要!)
    摘自 https://blog.csdn.net/qq_16549251/article/details/125453830 1.在pom.xml文件中添加OpenFeign的依赖.OpenFeign中集成了ribbion实现负载均衡<!--OpenFeign-......
  • Feign调用第三方http接口 (摘抄)
    我们平常在开发的时候,经常会碰到调用第三方的接口,这个时候我们可以使用httpClient或者restTemplate,但是这两种方式相比较与Feign调用,都会麻烦一点儿。Feign是声明式服务调......
  • cpu性能最大化和cpu负载均衡
    echoperformance>/sys/class/devfreq/soc:qcom,cpubw/governorechoperformance>/sys/devices/system/cpu/cpu0/cpufreq/scaling_governorechoperformance>/sys/......
  • 负载均衡
    O:环境准备三台虚拟机分别取名dirrs1rs2给dir1和dir2分别加入网关=dir的IPvi/etc/sysconfig/network-scripts/ifcfg-ens33GETWAY=192.168.200.147##也可以......