• Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制


    Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制

    因为没有注册中心,所以需要网关对下游服务做负载均衡,然后果断集成Ribbon。中间遇到很多坑,最后终于解决了。

    其实Ribbon里面默认开启了重试机制的。

    Zuul配合Ribbon的代码展示:

    如果希望最后的映射路由有前缀/test ,那么需要加上strip-prefix=false,因为默认是true。

    zuul.routes.test.path=/test/**
    zuul.routes.test.strip-prefix=false
    zuul.routes.test.serviceId=test
    test.ribbon.listOfServers=http://192.168.10.161:9001,http://192.168.10.162:9001
    

     关于重试的其他配置:

    ribbon.MaxAutoRetries=1   # 对当前实例的重试次数
    ribbon.MaxAutoRetriesNextServer=10 # 切换实例的重试次数
    ribbon.ConnecTimeOut=3000 # 请求的连接时间
    ribbon.OkToRetryOnAllOperations=true # 对所有操作都进行重试
    

    备注: 上述是对所有进行配置,如果需要对某个服务,则可以在前面加上服务名称。例如上述的test服务,则是test.ribbon.MaxAutoRetries=xxx

    RestTemplate配合Ribbon

    第一步:

    在RestTemplate的Bean上加注解@LoadBalance 就结束了。

    @Configuration
    public class RestConfiguration {
    
    
        @Autowired
        RestTemplateBuilder builder;
    
        @LoadBalanced
        @Bean
        public RestTemplate restTemplate() {
            return builder.build();
        }
    
    }

    利用RestTemplate发送请求,达到负载均衡和重试效果。

        public HttpResult verifyToken(String token, String ip) {
            JSONObject result = restTemplate.getForObject("http://test/" + "token/verify/{token}/{ip}", JSONObject.class, token, ip);
            HttpResult httpResult = JSON.parseObject(result.toJSONString(), HttpResult.class);
            return httpResult;
        }

    url中间的host+port被替换成了额服务名称,(可以是注册中心注册的服务名,也可以是自定义的,比如咱们这个脱离Eureka的就是自定义的,开头有配置。),它会根据test这个服务名,找配置中的listServers根据负载均衡策略和配置好的重试配置,来进行负载均衡和失败重试。

    关于负载均衡策略

    1. 首先配置某个服务实例的负载均衡策略(注意,这个类不能被Componscan扫描到,否则会被所有的配置共享,比如我就是加了个自定义注解@IngoreComponentScan,然后配置了不扫描这个注解所在的类)

    @Configuration
    @IgnoreComponentScan
    public class TestRibbonConfiguration {
    
        @Bean
        public IRule ribbonRule() {
            return new RoundRobinRule();
        }
    }

    2.然后配置一个Ribbon客户端,服务名写你想配置的服务名,配置类自然就是刚刚配置的配置类。

    @Configuration
    @RibbonClient(name = "test", configuration = TestRibbonConfiguration.class)
    public class RibbonConfiguration {
    }

    这样Ribbon的负载均衡策略就OK了(仅仅是针对test服务的,如果想配置所有的默认配置,那么单独配置就好了, 看看官网或者别的博客...我就不记笔记了。。。)

  • 相关阅读:
    同步与异步 & 阻塞与非阻塞
    Memcached和Redis比较
    PHP安全之Web攻击
    搭建LNAMP环境(七)- PHP7源码安装Memcached和Memcache拓展
    PHP安装mysql.so扩展
    MySQL基础笔记
    CGI概念
    Nginx与Apache比较
    Nginx重写
    负载均衡session会话保持方法
  • 原文地址:https://www.cnblogs.com/deepSleeping/p/11777768.html
Copyright © 2020-2023  润新知