Feign实现负载均衡

上一篇讲了用RestTemplate加上@LoadBalanced实现负载均衡,这次介绍个更方便的工具 -> feign,feign不需要将url硬编码在代码里,可以通过配置文件的方式来做,而且只需要定义几个接口,这些接口里的抽象方法可以看做controller中方法的空实现。
spring cloud为我们把feign封装了一遍,更便于我们使用,feign自带了ribbon,不需要重新引入ribbon。

详细代码请看 feign 模块
创建 feign-provider 模块用来提供服务,和eureka-provider-consumer中的provider一样,也是启动两个端口,代码实现部分都是一样的
唯一区别是消费端,请看feign-consumer。

先引入openfeign依赖
feign-consumer pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>fegin</artifactId>
        <groupId>com.coddox.fegin</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.coddox.fegin.consumer</groupId>
    <artifactId>feign-consumer</artifactId>

    <dependencies>
	<!-- feign依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

在消费端的启动类添加@EnableFeignClients注解

创建feign接口,@FeignClient里面指定的是provider的服务名,@RequestMapping是接口地址

@FeignClient("FEIGN-PROVIDER")
public interface UserSearchClient {

    @RequestMapping("/user-search/list")
    String list();
}

消费端的controller使用这个接口

@RestController
@RequestMapping("/user-search")
public class UserSearchController {

    @Autowired
    private UserSearchClient userSearchClient;

    /**
     * 通过feign接口调用provider实现负载均衡
     */
    @RequestMapping("/list")
    public String list() {
        return userSearchClient.list();
    }
}

启动eureka server(8080端口)和两个provider分别是8081,8082端口还有consumer(8083)
image.png
访问consumer接口,可以看到feign已经自动帮我们实现负载均衡了

第一次请求
image.png

第二次
image.png

源码:https://codox.coding.net/public/springcloud-learning/springcloud-learning/git/files

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×