Nacos

88 阅读2分钟

Nacos 服务注册中心,配置中心,服务管理平台(页面管理平台)

下载安装启动nacos(部署注册中心)

Windows版本下载安装。

(nacos默认集群启动,练习中使用单机启动,修改配置文件)

打开bin文件夹下的startup.cmd(Linux下为startup.sh),更改一处配置。

image.png

点击startup.cmd,启动nacos。

服务注册和发现(服务客户端)

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

配置

server.port= 客户端端口
spring.application.name= 客户端服务名称
spring:
  cloud:
    nacos:
      discovery:
        # 地址
        server-addr: localhost:8848(nacos服务中心地址)
        # 命名空间
        # namespace: 默认是public

客户端启动后,自动把客户端的ip,端口,客户端的服务名注册在服务中心。

Nacos集群

为什么要做集群,有什么用?

  • 其实就是为了应用的高可用,避免一台挂了,导致应用不可用

我们要实现的集群形式如下:需要1个Nginx+3个nacos注册中心+1个mysql

image.png

spring:
  cloud:
    nacos:
      discovery:
        # 地址
        server-addr: localhost:8848(Nginx地址和监听的端口)

具体操作参考(Linux系统中nacos集群搭建看这一篇就够了_彤彤的小跟班的博客-CSDN博客_linux nacos集群

少走99%的弯路!目前B站最好的SpringCloudAlibaba入门教程,保姆级教程通俗易懂!_哔哩哔哩_bilibili

Ribbon负载均衡

在 Nacos 中,调用主要是通过 RestTemplate + Ribbon 实现的,RestTemplate 是 Spring 提供的 Restful 请求实现类,而 Ribbon 是客户端负载均衡器,通过 Ribbon 可以获取服务实例的具体信息(IP 和端口号),之后再通过 RestTemplate 加服务实例的具体信息就可以完成一次服务调用了。 nacos-discovery 依赖了Ribbon,可以不再引入。

@LoadBalanced // 使 RestTemplate 自动支持 Ribbon 负载均衡 
@Bean 
public RestTemplate restTemplate() {
    return new RestTemplate(); 
}
// 请求并获取结果(springcloud-nacos-provider 为 Nacos 服务id) 
String result = 
restTemplate.getForObject("http://springcloud-nacos-provider/call/" + name, String.class);

Ribbon负载均衡策略默认是轮询

修改Ribbon负载均衡策略

方法一:配置类

@Configuration
public class RibbonRandomRuleConfig {

    //方法名一定要是 iRule
    @Bean
    public IRule iRule(){
        return new RandomRule();
    }
}

方法二:配置文件

stock-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule  #指定使用Nacos提供的负载均衡策略(优先调用同一集群的实例,基于随机&权重)