当前位置:   article > 正文

SpringBoot整合Nacos_springboot集成nacos

springboot集成nacos

1、什么是Nacos

官方:一个更易于构建云原生应用的动态服务发现服务配置、和服务管理平台
理解:注册中心(如:服务地址注册进去根据名称调用)、配置中心(如:每个服务yaml中的配置)、服务管理(可视化管理平台)

2、本地启动(windows单机版):

1、下载nacos,并启动

  • nacos下载地址

  • 本地启动单机模式需要修改nacos/bin/startup.cmdset MODE="cluster"set MODE="standalone"(集群修改为单机)

  • 修改nacos数据源nacos/conf/application.properties,默认关闭,存在内存中。

  • 启动完成,访问路径:http://localhost:8848/nacos/#/login 登录名和密码都是nacos

百度网盘下载链接:https://pan.baidu.com/s/1YpbW7TgQpXY5y8ayn68lRw
提取码:l18x

2、 pom里面添加服务注册 和 配置中心(父项目依赖spring-cloud-alibaba-dependencies)

		<!--  nacos 服务的注册发现     -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--  nacos  配置中心做依赖管理    -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <!-- dubbo-apache -->
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

配置yaml

# 应用名称(nacos会将改名称作为服务名称)
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public #命名空间,如prod,dev,默认public
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3、服务器启动(linux集群版):

1、下载并解压到对应目录下,copy三份分别为nacos8849,nacos8850,nacos8851
2、分别修改conf/application.properties文件中端口为8849,8850,8851
在这里插入图片描述
3、分别开启数据库,集群是保存到数据库中保证数据一致
在这里插入图片描述
4、创建nacos数据库并执行conf/nacos-mysql.sql文件中的sql
5、copy配置文件conf/cluster.conf.example为conf/cluster.conf并修改如下
在这里插入图片描述
6、如果服务器内存不够大,可修改集群内存大小,在bin/startup.sh目录下,第一个是单机占用内存,第二个是集群占用内存
在这里插入图片描述
7、然后启动分别启动bin/startup.sh即可(注意启动数据库)
8、配置nginx负载均衡,在nginx/conf/nginx.conf的http中配置如下

# 访问localhost:8847/nacos/反向代理为http://127.0.0.1:8849/nacos/或http://127.0.0.1:8850/nacos/,轮询负载均衡机制
    upstream nacoscluster {
        server 127.0.0.1:8849;
        server 127.0.0.1:8850;
        server 127.0.0.1:8851;
    }
    server {
    	# 监听本地端口为8847
        listen      8847;
        server_name localhost;
		
        location /nacos/ {
            proxy_pass http://nacoscluster/nacos/;
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

9、启动sbin下的nginx,然后即可访问localhost:8847/nacos/,yaml中修改nacos地址为127.0.0.1:8847

4、负载均衡介绍

负载均衡有两类,服务端负载均衡和客户端负载均衡;
1、客户端负载均衡
例如 Ribbon。如下所有服务地址都注册到了注册中心,然后服务消费者可以去注册中心获取所有服务地址,然后自己通过负载均衡算法选择一个服务地址进行访问。由服务消费者(客户端)完成负载均衡。
在这里插入图片描述
2、服务端负载均衡
服务端负载均衡有三种实现方式:

  • 基于DNS实现负载均衡
  • 基于硬件实现负载均衡
  • 基于软件实现负载均衡

这里介绍基于软件实现负载均衡,例如Nginx,在nginx中配置所有服务地址,服务消费者调用时nginx通过轮询负载均衡算法进行分配服务地址。由服务端(nginx)完成负载均衡分配
在这里插入图片描述
3、常见负载均衡算法
在这里插入图片描述

5、nacos中的Ribbon负载均衡

默认为轮询负载均衡策略

1、nacos-discovery默认加入了Ribbon的依赖
在这里插入图片描述2、只需要在restTemplate中加入@LoadBalanced注解即可引入负载均衡
在这里插入图片描述
3、然后再调用服务时用服务名称即可
在这里插入图片描述

6、Ribbon默认负载均衡策略

在这里插入图片描述

1、Ribbon自带的负载策略类

 # com.netflix.loadbalancer.RoundRobinRule  - 轮询
 # com.netflix.loadbalancer.RandomRule  - 随机
 # com.netflix.loadbalancer.RetryRule - 重试,先按RoundRobinRule进行轮询,如果失败就在指定时间内进行重试
 # com.netflix.loadbalancer.WeightedResponseTimeRule(nacos中权重要使用NacosRule,nacos对权重进行了基本配置的扩展) - 权重,响应速度越快,权重越大,越容易被选中。
 # com.netflix.loadbalancer.BestAvailableRule  - 先过滤掉不可用的处于断路器跳闸转态的服务,然后选择一个并发量最小的服务
 # com.netflix.loadbalancer.AvailabilityFilteringRule - 先过滤掉故障实例,再选择并发量较小的实例
 # com.netflix.loadbalancer.ZoneAvoidanceRule - 默认规则,复合判断server所在区域的性能和server的可用性进行服务的选择。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2、如何修改Nacos中Ribbon的默认负载均衡策略

方式一:

  • 新建一个不会被@ComponentScan组件扫描到的包,如:com.rules
  • 在该包下新建自己的负载均衡算法的规则类
  • 主启动类上添加注解:@RibbonClient
package com.rules;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @desc 自定义负载均衡策略(用于替换默认的RoundRobinRule轮询策略)
 */
@Configuration
public class MyLoadBalanceRule {

  @Bean
  public IRule myRule(){
    return new RandomRule(); // 改为随机算法规则
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在这里插入图片描述
方式二:

  • 配置yaml来修改Ribbon默认负载均衡策略

这里设置负载均衡为权重,注意不能使用WeightedResponseTimeRule而要使用nacos自己扩展的NacosRule

stock-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
  • 1
  • 2
  • 3

然后通过nacos设置服务权重,权重越大越容易被选中
在这里插入图片描述
3、自定义一个负载均衡策略

package com.ribbon;

import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.Server;

import java.util.List;
import java.util.concurrent.ThreadLocalRandom;

public class CustomRule extends AbstractLoadBalancerRule {
    // 获取基本属性
    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {
    }
    // 用来获取服务
    @Override
    public Server choose(Object o) {
        // 实现一个简单的自定义负载均衡策略
        ILoadBalancer loadBalancer = this.getLoadBalancer();
        // 获取当前请求服务实例
        List<Server> reachableServers = loadBalancer.getReachableServers();
        // 获取随机数
        int random = ThreadLocalRandom.current().nextInt(reachableServers.size());
        // 随机获取一个服务
        Server server = reachableServers.get(random);
        return server;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

以上可以自定义一个负载均衡策略,但是在第一次调用服务的时候才会去动态加载负载均衡策略,这样会影响调用速率。通过以下配置在启动服务时初始化负载均衡策略

ribbon:
  eager-load:
    enabled: true # 开启ribbon饥饿加载
    clients: stock-service # 需要启动负载均衡的服务,多个用逗号隔开
  • 1
  • 2
  • 3
  • 4

7、Nacos配置中心

1、配置管理界面如下:在这里插入图片描述
2、权限控制
1)首先要先将conf/application.properties中如下配置改为true(需要重启nacos)
在这里插入图片描述
2)添加用户在这里插入图片描述3)给用户配置角色在这里插入图片描述
4)给角色赋予权限
在这里插入图片描述

用@value注解读取配置文件信息时需要在类上加入@RefreshScope注解才能动态读取配置文件信息(不重启)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/594527
推荐阅读
相关标签
  

闽ICP备14008679号