• 搭建单机 nacos 负载均衡ribbon 轮询策略 权重2种方式


    单机搭建

    jps
    cd /opt/
    ls
    tar -zxf nacos-server-1.4.2.tar.gz 
    mv nacos soft/nacos8848
    cd soft/nacos8848/conf/
    vim application.properties
    cd ../bin/
    ls
    pwd
    #常在/etc/profile文件中修改环境变量
    vim /etc/profile
    #添加到末尾
    =============================
    #nacos env
    export NACOS_HOME=/opt/soft/nacos8848
    export PATH=$PATH:$NACOS_HOME/bin
    =============================
    #:wq!
    cd ~
    cd /opt/soft/nacos8848/bin/
    #关闭集群模式
    vim startup.sh
    #=============================#
    #修改下面文件
    export MODE="standalone"
    #=============================#
    #:wq!
    source /etc/profile
    #启动
    startup.sh
    #打开浏览器
    192.168.64.200:8848/nacos/#/login

    网页界面

    NACOS.一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生应用程序

    ideal 打包?

    负载均衡ribbon

    1.什么是Ribbon
    目前主流的负载方案分为以下两种:
    集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如Nginx)。
    客户端根据自己的请求情况做负载均衡,Ribbon 就属于客户端自己做负载均衡。
    Spring Cloud Ribbon是基于Netflix Ribbon 实现的一套客户端的负载均衡工具,Ribbon客户端组件提供一系列的完善的配置,如超
    时,重试等。通过Load Balancer获取到服务提供的所有机器实例,Ribbon会自动基于某种规则(轮询,随机)去调用这些服务。Ribbon也可以实现我们自己的负载均衡算法。

    公司看项目 注意点

    springCloud alibaba 版本

    ideal 配置nacos

    pom导入包

    #properties 写入下面版本
    <spring-boot.version>2.3.2.RELEASE</spring-boot.version>
    <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
    <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
    ​
    ​
    #导入dependency依赖
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring-cloud-alibaba.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>   

    配置yum

    server:
      port: 12000
    spring: 
      application:
        name: stockserv
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.64.200:8848
            username: nacos
            password: nacos
            namespace: public

    导入子项目依赖

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>

    编写订单的配置文件

    @Configuration
    public class RemoteConfig {
        @Bean
        public RestTemplate getAjax(){
            return new ResTemplate;
        }
    }

    浏览器输入地址

    http://localhost:1201/order-server/addorder

    负载均衡

    http://localhost:1201/order-server/addorder
    ​

    轮询策略

    轮询
    区域轮询
    区域分区
    从事轮询
    线性轮询
      

    方式1

    #Application中上面加这个注解
    @RibbonClients(value={
            @RibbonClient(name="stockserv",configuration= RibbonRule.class)
    })
    ​
    ​
    #不在applicaiton目录下 新建实体类RibbonRule
    @Configuration
    public class RibbonRule {
        //手动权重
        @Bean
        public IRule iRule(){
            return new NacosRule();
        }
    }
    ​

    方式二

    yum里面配置
    stockserv:
      ribbon:
        NFloadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

    --------------注意2种方法不能一起写*--------------

    #类似规则引擎。。。。。。。
    #自定义负载策略
    ​
    public class MyNacosRule extends AbstractLoadBalancerRule {
    ​
        @Autowired
        private NacosDiscoveryProperties nacosDiscoveryProperties;
    ​
        @Override
        public void initWithNiwsConfig(IClientConfig iClientConfig) {
    ​
        }
    ​
        @Override
        public Server choose(Object o) {
            //从注册中心上获取动态服务列表
            DynamicServerListLoadBalancer lb= (DynamicServerListLoadBalancer)getLoadBalancer();
            //获取服务名
            String serverName = lb.getName();
            //构建服务名实例
            NamingService ns = nacosDiscoveryProperties.namingServiceInstance();
            //nacos基于权重的算法
            try {
                Instance instance = ns.selectOneHealthyInstance(serverName);
                //放入服务器
                return new NacosServer(instance);
            } catch (NacosException e) {
              e.printStackTrace();
            }
            //如果出现问题 则返回用户null
            return null;
        }
    }
    ​
    ​

    配置yum

    stockserv:
      ribbon:
        NFloadBalancerRuleClassName: com.kgc.mynacos.rrules.custrules.MyNacosRule

    权重

    controller配置权重

    #1 controller配置系统权重
    ​
    #controller层 注意(configuration= RibbonRule.class 中修改为RibbonRule)
    #
    @SpringBootApplication
    //@RibbonClients(value={
    //        @RibbonClient(name="stockserv",configuration= RibbonRule.class)
    //})
    public class OrderApplication {
        public static void main(String[] args) {
            SpringApplication.run(OrderApplication.class,args);
        }
    }
    ​
    #rules层 提供系统自带的权重 rules的位置不要和application一级
    ​
    @Configuration
    public class RibbonRule {
        //手动权重
        @Bean
        public IRule iRule(){
    //        return new NacosRule();
            //自动权重
            return new RandomRule();
        }
    }
    ​
    ​
    ​
    #2 controller配置自定义权重
    #controller层
    注意(configuration= MyNacosRule.class 中修改为MyNacosRule)
    #
    @SpringBootApplication
    //@RibbonClients(value={
    //        @RibbonClient(name="stockserv",configuration= MyNacosRule.class)
    //})
    public class OrderApplication {
        public static void main(String[] args) {
            SpringApplication.run(OrderApplication.class,args);
        }
    }
    ​
    #rules层 
    #提供自定义的权重 rules的位置不要和application一级
    #-----------------------------
    public class MyNacosRule extends AbstractLoadBalancerRule {
    ​
        @Autowired
        private NacosDiscoveryProperties nacosDiscoveryProperties;
    ​
    ​
    ​
        @Override
        public Server choose(Object o) {
            //从注册中心上获取动态服务列表
            DynamicServerListLoadBalancer lb= (DynamicServerListLoadBalancer)getLoadBalancer();
            //获取服务名
            String serverName = lb.getName();
            //构建服务名实例
            NamingService ns = nacosDiscoveryProperties.namingServiceInstance();
            //nacos基于权重的算法
            try {
                Instance instance = ns.selectOneHealthyInstance(serverName);
                //放入服务器
                return new NacosServer(instance);
            } catch (NacosException e) {
              e.printStackTrace();
            }
            //如果出现问题 则返回用户null
            return null;
        }
    ​
        @Override
        public void initWithNiwsConfig(IClientConfig iClientConfig) {
    ​
        }
    }
    #-----------------------------
    ​

    yml配置权重

    #1 yum 中配置系统权重  (这个暂时不能用 )
    注意(RibbonRule类别写错 NFLoadBalancerRuleClassName 这个注意大小写)
    stockserv:
      ribbon:
        NFLoadBalancerRuleClassName: com.kgc.mynacos.rrules.custrules.RibbonRule
        
    #rules层 提供系统自带的权重 rules的位置不要和application一级
    ​
    @Configuration
    public class RibbonRule {
        //手动权重
        @Bean
        public IRule iRule(){
    //        return new NacosRule();
            //自动权重
            return new RandomRule();
        }
    }
    ​
    ​
    #2 yum 中配置自定义权重 注意(MyNacosRule类别写错 NFLoadBalancerRuleClassName 这个注意大小写)
    stockserv:
      ribbon:
        NFLoadBalancerRuleClassName: com.kgc.mynacos.rrules.custrules.MyNacosRule
    ​
    #rules层 
    #提供自定义的权重 rules的位置不要和application一级
    #-----------------------------
    public class MyNacosRule extends AbstractLoadBalancerRule {
    ​
        @Autowired
        private NacosDiscoveryProperties nacosDiscoveryProperties;
    ​
    ​
    ​
        @Override
        public Server choose(Object o) {
            //从注册中心上获取动态服务列表
            DynamicServerListLoadBalancer lb= (DynamicServerListLoadBalancer)getLoadBalancer();
            //获取服务名
            String serverName = lb.getName();
            //构建服务名实例
            NamingService ns = nacosDiscoveryProperties.namingServiceInstance();
            //nacos基于权重的算法
            try {
                Instance instance = ns.selectOneHealthyInstance(serverName);
                //放入服务器
                return new NacosServer(instance);
            } catch (NacosException e) {
              e.printStackTrace();
            }
            //如果出现问题 则返回用户null
            return null;
        }
    ​
        @Override
        public void initWithNiwsConfig(IClientConfig iClientConfig) {
    ​
        }
    }
    #-----------------------------
    ​

    如果不配置就走轮询策略!!!

    永久插入图片

    首先将图片通过在线转码工具转换成base64的编码,并用以下格式嵌入即可,格式如下:
    ![image] (base64)
    但是由于这base64编码往往都很长,很占篇幅,因此我们可以给图片编号,并将所有的图片base64编码放在文档的最后即可,格式如下:
    ​
        在插入图片的地方使用:![image] [图片编号]
        在文档最后使用:[图片编号]:base64编码
  • 相关阅读:
    开放式耳机怎么选择、300之内最好的耳机推荐
    科技部首批支持建设十个人工智能示范应用场景,智能家居再获加持
    新能源国标接入随想
    opencv-图片水印
    Docker 镜像管理
    Springboot 集成WebSocket作为客户端,含重连接功能,开箱即用
    人肠道宏病毒与其宿主和环境因素的关联分析
    基于ansible批量实现部署数据库主从复制
    C#调用WebService的方法介绍
    单调栈和单调队列
  • 原文地址:https://blog.csdn.net/just_learing/article/details/125509648