SpringCloud中怎么使用Feign实现负载均衡

这篇文章给大家介绍Spring Cloud中怎么使用Feign实现负载均衡,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

目前创新互联已为上千多家的企业提供了网站建设、域名、网页空间、网站运营、企业网站设计、阿克陶网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

Feign简介

Feign is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has pluggable annotation support including Feign annotations and JAX-RS annotations. Feign also supports pluggable encoders and decoders. Spring Cloud adds support for Spring MVC annotations and for using the same HttpMessageConverters used by default in Spring Web. Spring Cloud integrates Ribbon and Eureka to provide a load balanced http client when using Feign.

Feign是一个声明式的web服务客户端,它使得写web客户端变得更简单。想要使用Feign,只需要创建一个接口并注解它。Feign具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign还支持可插拔的编码器和解码器。Spring Cloud添加了对Spring MVC注释的支持,并默认使用和Spring Web相同的HttpMessageConverters。当使用Feign时,Spring Cloud集成了Ribbon和Eureka以提供负载平衡的http客户端。

简而言之:

  • Feign 采用的是基于接口的注解

  • Feign 集成了ribbon,具有负载均衡的能力

  • 集成了Hystrix,具有熔断的能力

准备工作

继续在第一节项目的基础上,启动eureka-server,端口为9090;启动两个eureka-client, 端口为8040、8041。

创建一个Feign服务

使用Spring Initializr新建一个项目,取名为feign-service, 在Spring Cloud Discovery中勾选Eureka Discovery Client,在Spring Cloud Routing中勾选OpenFeign,在Web中勾选Spring Web:

Spring Cloud中怎么使用Feign实现负载均衡

Spring Cloud中怎么使用Feign实现负载均衡

Spring Cloud中怎么使用Feign实现负载均衡

创建成功后,项目pom.xml如下:



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.9.RELEASE
         
    
    com.noodles.mars
    feign-service
    0.0.1-SNAPSHOT
    feign-service
    Feign Service

    
        1.8
        Greenwich.SR3
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

feign-service配置服务中心地址、应用名、端口,配置文件内容:

server:
  port: 8080

eureka:
  client:
    service-url:
      defaultZone: http://localhost:9090/eureka/

spring:
  application:
    name: feign-client

在项目启动类上注解@EnableDiscoveryClient, 开启向服务中心注册;注解@EnableFeignClients开启Feign功能:

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class FeignServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(FeignServiceApplication.class, args);
    }

}

定义一个feign接口,通过@FeignClient("服务应用名"),来指定调用哪个服务。比如在代码中调用了hello-erueka-client服务的/hello接口,代码如下:

@FeignClient(value = "hello-eureka-client")
public interface FeignService {

    @GetMapping(value = "/hello")
    String hello(@RequestParam(value = "name") String name);
}

定义一个Controller,对外提供一个"/hello"的Rest API接口, 通过上面定义的Feign来调用服务提供者:

@RestController
public class FeignController {

    private final FeignService feignService;

    @Autowired
    public FeignController(FeignService feignService) {
        this.feignService = feignService;
    }

    @GetMapping(value = "/hello")
    public String hello(@RequestParam("name") String name) {
        return feignService.hello(name);
    }
}

在浏览器上多次访问 http://localhost:8080/hello?name=Mars :

Hello, My name is Mars, I'm from port: 8040
Hello, My name is Mars, I'm from port: 8041

关于Spring Cloud中怎么使用Feign实现负载均衡就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


文章名称:SpringCloud中怎么使用Feign实现负载均衡
文章路径:http://myzitong.com/article/ipdhej.html