nacos

来源

整理自B站尚硅谷

概念

官网地址,发现、配置和管理微服务、Nacos 提供了一组简单易用的特性集,快速实现动态服务发现、服务配置、服务元数据及流量管理、Nacos: Dynamic Naming and Configuration Service、替代Eureka做服务注册中心、替代Config做服务配置中心。

下载地址:https://github.com/alibaba/nacos/releases/

来到bin目录下运行startup.cmd,如果报错,nacos默认是以集群环境启动的,使用命令以单体运行:startup.cmd -m standalone,运行成功后访问nacos的控制台http://localhost:8848/nacos,账号密码默认都是nacos,来到nacos的控制台。

案例

新建module cloudalibaba-provider-payment9001

父工程pom

<dependencyManagement> 
    <dependencies> 
        <dependency> 
            <groupId> com.alibaba.cloud </groupId> 
            <artifactId> spring-cloud-alibaba-dependencies </artifactId> 
            <version> 2.1.0.RELEASE </version> 
            <type> pom </type> 
            <scope> import </scope> 
        </dependency> 
    </dependencies> 
</dependencyManagement>

9001pom

 <dependencies>
        <!--SpringCloud ailibaba nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- SpringBoot整合Web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

yml

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址

management:
  endpoints:
    web:
      exposure:
        include: '*'

主启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001
{
    public static void main(String[] args) {
            SpringApplication.run(PaymentMain9001.class, args);
    }
}

controller

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PaymentController {

@Value("${server.port}")
private String serverPort;

@GetMapping(value = "/payment/nacos")
public String getPayment()
{
return "registry 1, serverPort: "+ serverPort;
}

}

测试

http://localhost:9001/payment/nacos

 

 

 

 

 

 这样nacos服务注册和服务发现都好了。

负载均衡

根据cloudalibaba-provider-payment9001创建cloudalibaba-provider-payment9002,基本上一模一样

nacos整合了ribbo,支持负载均衡

 

 

 

创建服务消费者cloudalibaba-consumer-nacos-order83

pom

<dependencies>
        <!--SpringCloud ailibaba nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- SpringBoot整合Web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>  
    </dependencies>

yml

server:
  port: 83


spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848


#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:
  nacos-user-service: http://nacos-payment-provider 

主启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class OrderNacosMain83 {
  public static void main(String[] args) {
    SpringApplication.run(OrderNacosMain83.class,args);
  }
}

配置

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextBean {
  @Bean
  @LoadBalanced
  public RestTemplate getRestTemplate()
  {
    return new RestTemplate();
  }
}

controller

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
public class OrderNacosController {

  @Resource
  private RestTemplate restTemplate;

  @Value("${service-url.nacos-user-service}")
  private String serverURL;

  @GetMapping("/consumer/payment/nacos")
  public String paymentInfo()
  {
    return restTemplate.getForObject(serverURL+"/payment/nacos",String.class);
  }


}

测试

http://localhost:83/consumer/payment/nacos,负载均衡实现了,nacos控制台也正常

 

 

 特点

Nacos 支持AP和CP模式的切换,命名空间类似于java的包,

自动刷新案例

 

新建module cloudalibaba-config-nacos-client3377

pom

<dependencies>
        <!--nacos-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--web + actuator-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

yml

Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。
springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application

bootstrap.yml

# nacos配置
server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置

application.yml

 
spring:
  profiles:
    active: dev # 表示开发环境

主启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}

}

controller

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class ConfigClientController {

@Value("${config.info}")
private String configInfo;

@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}


 

 

也就是dataId=服务名称-项目环境.文件格式

创建一个配置

 

 

 启动3377的服务,测试:http://localhost:3377/config/info

 

 

 修改配置文件,再次调用查看配置的接口,http://localhost:3377/config/info,配置已经刷新了

分类配置

 

 

 类似于java的包名和类名

 新建一个命名空间

 

 

 切换命名空间创建配置文件

 

 

 

修改bootstrap.yml

 

 测试:http://localhost:3377/config/info

集群模式部署

 

 这里在cenos 7环境下使用一个nginx,三个nacos,一个mysql模拟

mysql配置

安装好nacos后,登录进去mysql,create database nacos_config;

use nacos_config;

source nacos-mysql.sql;

nacos配置

修改conf下的application.properties

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=密码

修改cluster.conf

使用hostname -I获得ip,i一定是大写,小写可能是127.0.0.1,假设我查出来的是192.168.111.130

cp cluster.conf.example cluster.conf

vi cluster.conf

添加如下内容

192.168.111.130:3333
192.168.111.130:4444
192.168.111.130:5555

前面的ip使用hostname -I查出来的,按i进入编译,esc退出编译,:wq!进行保存。

修改startup.sh

[root@localhost bin]#cp startup.sh start.sh.init
[root@localhost bin]#vim startup.sh

修改前

修改后

 启动之前先启动mysql服务

service mysqld start

在nacos的bin目录下的执行:

./startup.sh -p 3333
./startup.sh -p 4444

./startup.sh -p 5555

windows浏览器测试:http://192.168.111.130:3333/nacos/#/login,如果能出现登录页面,说明配置成功

输入 ps -ef|grep nacos|grep -v grep|wc -l 查看,如果不是3,可能是jvm内存不够,修改nacos的配置

修改nginx.conf

进入到nginx的conf目录

[root@localhost conf]# cp nginx.conf nginx.conf.bk
[root@localhost conf]# vim nginx.conf

upstream cluster{
        server 127.0.0.1:3333;
        server 127.0.0.1:4444;
        server 127.0.0.1:5555;
    }
server {
        listen       1111;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            #root   html;
            #index  index.html index.htm;
            proxy_pass http://cluster;
        }

进入到nginx的sbin目录

./nginx 

访问192.168.111.130/nacos,注意,这里的ip是用hostname -I查出来的

修改9002的配置文件

 

posted @ 2021-07-18 00:29  翻蹄亮掌一皮鞋  阅读(331)  评论(0)    收藏  举报