张坤的个人博客

  • 首页
  • 分类
  • 标签
  • 日志

  • 搜索
Jenkins RabbitMQ Zookeeper IDEA Logstash Kibana ELK NIO Netty Spring Cloud Golang DataX Elasticsearch React Native Mysql H2 Socket Spring Boot Kafka Mybatis Sqlmap Vue Postgresql Docker Vert.x Flutter Flink Redis

Feign实现负载均衡

发表于 2020-06-11 | 分类于 Spring Cloud | 0 | 阅读次数 28

上一篇讲了用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

# Jenkins # RabbitMQ # Zookeeper # IDEA # Logstash # Kibana # ELK # NIO # Netty # Spring Cloud # Golang # DataX # Elasticsearch # React Native # Mysql # H2 # Socket # Spring Boot # Kafka # Mybatis # Sqlmap # Vue # Postgresql # Docker # Vert.x # Flutter # Flink # Redis
Eureka服务搭建
Hystrix+Feign实现容错
  • 文章目录
  • 站点概览
会Coding的猴子

会Coding的猴子

57 日志
19 分类
28 标签
RSS
Github
Creative Commons
© 2021 会Coding的猴子
由 Halo 强力驱动
|
主题 - NexT.Gemini v5.1.4

湘ICP备18011740号