• Spring Cloud Feign服务通信与负载均衡机制


    首先要知道一点Feign的负载均衡是Ribbon来实现的。

    Feign是一个声明式Web Service客户端,它的目的就是让Web Service调用更加简单Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign整合了RibbonHystrix(Hystrix熔断保护机制),可以让我们不再需要显式地使用这两个组件。

    Feign具有如下特性:

    可插拔的注解支持,包括Feign注解和JAX-RS注解;

    支持可插拔的HTTP编码器和解码器;

    支持Hystrix和它的Fallback;

    支持Ribbon的负载均衡;

    支持HTTP请求和响应的压缩。

    Feign的使用

    举个栗子:我有一个orders-server服务,和一个user-server-3000服务,user-server-3000服务做了集群user-server-3001

          orders-server服务要访问user-server服务。这时就需要Ribbon来实现权重均衡。轮询user-server-3000和user-server-3001服务

    1.在orders-server的pom.xml导包spring-cloud-starter-openfeign

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

    2.在order-server的配置类中添加@EnableFeignClients("接口包的全限定名")注解

    /**
     * @EnableFeignClients
     * 开启feign的客户端
     *
     * ("cn.itsorce.spring.feignclient")
     * 接口的权限定包名,不是必要的
     * 因为:
     * @EnableFeignClients扫描所有使用注解@FeignClient定义的feign客户端
     */
    
    @SpringBootApplication
    @EnableFeignClients("cn.itsorce.spring.feignclient")
    public class OrdersServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(OrdersServerApplication.class);
        }
    
    
    }

    3.在cn.itsorce.spring.feignclient包下创建个接口

    /**
     * @FeignClient(value="user-server")负载均衡客户端的名字
     *
     */
    
    @FeignClient(value = "user-server")
    public interface UserFeignClient { 
    /**
    *
    * 这个方法是和user-server的controller的方法
    * 方法名要和user-server的controller的方法,(返回值,方法名,参数,,requestMapping)一样
    *
    * @param id
    * @return
    */
        @GetMapping("/user/{id}")
        User getUserById(@PathVariable("id")Long id);
    
    }

    4.在orders-server的controller注入接口,在方法中调用接口的方法实现负载均衡(黄色背景的是主要代码)

    @RestController
    public class OrderConsumerController {
    
        /**
         * 注入feign的接口
         */
        @Autowired
        private UserFeignClient feignClient;
    
    
        /**
         * 该方法是浏览器来调用
         * @param id
         * @return
         */
        @GetMapping("/order/user/{id}")
        public User getUserById(@PathVariable("id") Long id){
            User user = feignClient.getUserById(id);
            return user;
        }
    }

    5.重启服务,就行了。

    修改负载均衡的机制:

    如果要把轮询机制改成随机机制

    在orders-server配置类中添加代码

    @Bean
        public IRule ribbonRule() {
            // 负载均衡规则,改为随机
            return new RandomRule();
        }

    重启服务,就行了。

  • 相关阅读:
    eclipse在线安装mybatis generator插件、及插件的使用
    Oracle 的SID 与 Service_Name 区别
    Mybatis generator 配置报错
    Mybatis generator 生成Javabean报错:Table configuration with catalog null, schema public, and table globalpage did not resolve to any tables
    pom.xml中添加oracle数据库驱动包报错: Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0
    Eclipse中10个最有用的快捷键组合
    Spring Tool Suite 配置和使用
    【搜索】【动态规划】【杂题】——洛谷P1514.引水入城
    c++ 矩阵求逆
    LNK1104 无法打开文件 exe
  • 原文地址:https://www.cnblogs.com/bigbigxiao/p/12115296.html
Copyright © 2020-2023  润新知