005SpringCloud--Feign:负载均衡(基于服务端)

news/2024/7/10 0:37:30 标签: 负载均衡, eureka, java

目录

Feign简介

Feign能干什么?

Feign默认集成了Ribbon

Feign的使用步骤

1.04-springcloud-consumer-dept-feign-80

 1.pom.xml

2.application.yml 和 configBean   【不变】

3.DeptConsumerController

4.FeignDeptConsumer_80 (扫描包)

2.改造springcloud-api模块

 1.pom.xml

 2.DeptClientService 

3 Feign和Ribbon如何选择?


Feign简介

Feign是声明式Web Service客户端,它让微服务之间的调用变得更简单,类似controller调用service。SpringCloud集成了Ribbon和Eureka,可以使用Feigin提供负载均衡的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维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡,而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。

Feign的使用步骤

1.04-springcloud-consumer-dept-feign-80

 

 1.pom.xml

        Riboon依赖换成openfeign

 <dependencies>

        <!--Feign的依赖-->
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>3.1.1</version>
        </dependency>


        <!--Eureka: Ribbon需要从Eureka服务中心获取要拿什么-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        
        <!--实体类 + web -->
        <dependency>
            <groupId>com.gh</groupId>
            <artifactId>01-springcloud-api</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>


    </dependencies>

2.application.yml 和 configBean   【不变】

3.DeptConsumerController

java">@RestController
public class DeptConsumerController {

    @Autowired
    private DeptClientService service = null;


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


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

    @RequestMapping("/consumer/dept/add")
    public Boolean addDept(Dept dept){
        return this.service.addDept(dept);
    }
}

4.FeignDeptConsumer_80 (扫描包)

java">@SpringBootApplication
@EnableEurekaClient //开启Eureka 客户端
@EnableFeignClients(basePackages = {"com.gh.service"})
@ComponentScans({@ComponentScan("com.gh.service")})
public class FeignDeptConsumer_80 {
    public static void main(String[] args) {
        SpringApplication.run(FeignDeptConsumer_80.class, args);
    }

}

特别注意:

        @ComponentScan("com.gh.service")

        @ComponentScans({@ComponentScan("com.gh.service")})

这里可能报错404,原因是因为FeignDeptConsumer_80启动类使用了

@SpringBootApplication@ComponentScan("com.gh.service"),当只有一个@ComponentScan的时候,SpringBootApplication是不会被加载

解决办法:

@ComponentScans({@ComponentScan("com.ghservice")}) 代替componentScan这种方法可以让@SpringBootApplication 和 多个 @ComponentScan("com.ghservice") 共存。

2.改造springcloud-api模块

 1.pom.xml

        <!--Feign的依赖-->
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>3.1.1</version>
        </dependency>

 2.DeptClientService 

  @FeignClient:微服务客户端注解,value:指定微服务的名字,这样就可以使Feign客户端直接找到对应的微服务

java">@Component
@FeignClient(value ="02-SPRINGCLOUD-PROVIDER-DEPT-8001")
public interface DeptClientService {


    @GetMapping("/dept/list")
    List<Dept> queryAll();

    @GetMapping("/dept/{id}")
    Dept queryById(@PathVariable("id") Long id);

    @PostMapping("/dept/add")
    Boolean addDept(Dept dept);

}

3 Feign和Ribbon如何选择?

根据个人习惯而定,如果喜欢REST风格使用Ribbon;如果喜欢社区版的面向接口风格使用Feign.

Feign 本质上也是实现了 Ribbon,只不过后者是在调用方式上,为了满足一些开发者习惯的接口调用习惯!


http://www.niftyadmin.cn/n/1183123.html

相关文章

.NET Data Provider , Getting Started: .NET Development with Oracle Database

http://www.oracle.com/technetwork/cn/topics/dotnet/for-beginners/index.html

关于Response.redirect和Response.End出现线程中止异常的处理(转)

关于Response.redirect和Response.End出现线程中止异常的处理&#xff08;转&#xff09; 前段时间做的项目在部署到应用服务器上之后&#xff0c;有很多用户IE会出现.NET的“大红界面”&#xff0c;查看Log日志&#xff0c;上面写到&#xff1a; 2003-9-28 17:27:51 481 线程…

006SpringCloud--Hystrix服务熔断

目录 分布式系统面临的问题 1.服务雪崩 2 什么是Hystrix&#xff1f; 3 Hystrix能干嘛&#xff1f; 4 服务熔断 服务熔断 05-springcloud-provider-dept-hystrix-8001 服务熔断 服务端 1.pom.xml 2.DeptController中 增加熔断机制 3.application.yml 4.DeptProvider…

VS201“.NET研究”0 C++下编译调试MongoDB源码

考虑到mongodb使用了boost库源码&#xff0c;参考mongodb官方文档后&#xff0c;下载编译boost版本是1.42(时间为2010-2-2)或更新版本:boost版本1.42&#xff1a;http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.zip/download 下载boost源码之后…

藏地密码-HD

http://itunes.apple.com/us/app/id406110658?mt8&ls1 【故事简介】 《藏地密码》&#xff0c;以120万字的宏大架构&#xff0c;讲述了以西藏和藏文化为背景的一个全球大探险故事&#xff0c;其中涉及到西藏千年秘史、藏传佛教历史遗案&#xff0c;以及世界上众多著名文化…

007SpringCloud--Zuul路由网关

目录 Zull路由网关 什么是zuul? Zuul 能干嘛&#xff1f; 07-springcloud-zuul-9527 1.pom.xml 2.application.yml 3.ZuulApplication_9527 测试1&#xff1a; 解决方法 BeanPostProcessor 测试2&#xff1a; Zull路由网关 概述 什么是zuul? Zull包含了对请求的路…

三表(access-list/prefix-list/as-path access-list)随想

一 access-list &#xff08;在接口、route-map等诸多模式下被引用&#xff09; 有二层、三层access-list之分&#xff0c;一般用的比较多的还是ip access-list&#xff0c;中心思想是基于数据流&#xff08;源、目的地址及四层应用端口&#xff09;&#xff0c;还有基于时间的…

008SpringCloud--config 分布式配置

目录 Spring Cloud Config 分布式配置 入门案例 服务端 08-springcloud-config-server-3344 1.pom.xml 2.application.yml 3.ConfigServer_3344 4.geitee application.yml ​ 测试&#xff1a; 客户端 08-springcloud-config-client-3355 1.pom.xml 2.1bootstra…