Spring Cloud(十九)Nacos 服务注册和配置中心

Table of Contents

1.Nacos 介绍

2.Nacos 安装

3.Nacos 服务注册与发现

1.提供者 alibaba-provider8901

2.提供者 alibaba-provider8902

3.消费者 alibaba-consumer8903

4.Nacos 配置中心

1.alibaba-config3377

2.DataId 格式

3.Group 配置

4.Namespace 配置

5.Nacos 持久化

6.Nacos 集群部署

1.jdk

2.下载安装

3.application.properties

4.单机启动测试

5. startup.sh 和  cluster.conf

6. 启动及jvm优化

7. Nignx配置

8. 测试


1.Nacos 介绍

官网:https://nacos.io/zh-cn/docs/quick-start.html

英文:https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html

中文:https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html

Nacos: Dynamic Naming and Contiguration Service

前四个字母分别为 Naming 和 Configuration 的前两个字母,最后的s为Service.

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos = Eureka+Config +Bus

 

补充:Nacos也可以切换为 CP

AP模式:不需要存储服务级别的信息且服务实例是通过nacos-client注册

CP模式:需要在服务级别编辑或者存储配置信息

 

 

2.Nacos 安装

 

1.1.4zip

linux安装--> Nacos 集群部署

链接:https://pan.baidu.com/s/1yYGo5QbWy8hZEGUJCYpY-A 
提取码:nuwk 
 

由于git下载较慢,也可以自己打包(最新版本)

git clone https://github.com/alibaba/nacos.git

cd nacos/

mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U

ls -al distribution/target/

 

http://192.168.1.101:8848/nacos

账号:nacos 密码:nacos

 

3.Nacos 服务注册与发现

Nacos Discovery 适配了 Netflix Ribbon,可以使用 RestTemplate 或 OpenFeign 进行服务的调用。

1.提供者 alibaba-provider8901

pom

<dependencies>
        <!--nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ak.demo</groupId>
            <artifactId>api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>

yml

server:
  port: 8901
spring:
  application:
    name: alibaba-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

management:
  endpoints:
    web:
      exposure:
        include: "*"

主启动

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

业务

@RestController
public class EchoController {

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

    @GetMapping(value = "/echo")
    public String echo() {
        return "Hello Nacos Discovery: " + serverPort;
    }
}

2.提供者 alibaba-provider8902

同8901

 

3.消费者 alibaba-consumer8903

pom、yml、主启动 参照上面

业务

@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced //开启负载均衡 注意,与自定义的互斥
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}
@RestController
public class EchoController {
    private final static String PAYMENT_URL = "http://alibaba-provider";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping(value = "consumer/echo")
    public String echo() {
        return restTemplate.getForObject(PAYMENT_URL + "/echo", String.class);
    }
}

4.Nacos 配置中心

 

1.alibaba-config3377

pom

<dependencies>
        <!--nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ak.demo</groupId>
            <artifactId>api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>
 

bootstrap.yml

server:
  port: 3377

spring:
  application:
    name: alibaba-config
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos服务注册中心地址
      config:
        server-addr: localhost:8804 #nacos作为配置中心地址
        file-extension: yaml #指定yaml格式配置,即3377服务到8848上读取类型为yaml的文件
        

application.yml

spring:
  profiles:
    active: dev #指定环境

 

2.DataId 格式

 

DataId 默认使用 `spring.application.name` 配置跟文件扩展名结合(配置格式默认使用 properties), GROUP 不配置默认使用 DEFAULT_GROUP。

当前项目的为:alibaba-config-dev.yaml

 ​

新增配置 http://localhost:8848/nacos

 

 

3.Group 配置

在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group=DEVELOP_GROUP

 

4.Namespace 配置

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring.cloud.nacos.config.namespace=5cd8fffa-3256-4373-9b12-3f4ed28f5f45

5.Nacos 持久化

在0.7版本之前,在单机模式时nacos使用嵌入式数据库(derby)实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,切换为mysql的操作步骤:

  • 1.安装数据库,版本要求:5.6.5+
  • 2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
  • 3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql

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

Caused by: java.lang.RuntimeException: Nacos Server did not start because dumpservice bean construction failure :
No DataSource set
    at com.alibaba.nacos.config.server.service.dump.DumpService.init(DumpService.java:140)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

注意:nacos 1.3.1以后的版本才支持 mysql 8

 

6.Nacos 集群部署

 

1.jdk

卸载linux自带jdk并安装jdk8

2.下载安装

链接:https://pan.baidu.com/s/1yiVB71hJ70zMJFbphIXA4g 
提取码:drqs

下载解压 unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz

3.application.properties

spring.datasource.platform=mysql

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

4.单机启动测试

linux下启动单机: ./startup.sh -m standalone

默认启动为集群模式,查看../logs/nacos.log会有报错信息,启动参数standalone 单机模式

 

5. startup.sh 和  cluster.conf

由于在同一台服务器搭建集群,通过修改 startup.sh 和  cluster.conf ,启动三个不同的端口

  • cluster.conf

cp cluster.conf.example cluster.conf

vim cluster.conf


#it is ip
#example
192.168.71.128:8841
192.168.71.128:8842
192.168.71.128:8843

  • startup.sh

修改前:

修改后:

6. 启动及jvm优化

分别启动三个服务

sh startup.sh -p 8841

sh startup.sh -p 8842

sh startup.sh -p 8843

由于内存不足,优化JVM如下

修改startup.sh

前:

后:-Xms256m -Xmx256m -Xmn85m

修改后启动成功:

ps -ef |grep nacos |grep port

ps -ef |grep nacos |grep port|wc -l

web访问分别访问三个地址验证

http://192.168.71.128:8841/nacos

http://192.168.71.128:8842/nacos

http://192.168.71.128:8843/nacos

 

7. Nignx配置

upstream cluster{
        server 192.168.71.128:8841;
        server 192.168.71.128:8842;
        server 192.168.71.128:8843;
}

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
      #  root   /usr/share/nginx/html;
      # index  index.html index.htm;
        proxy_pass http://cluster;
    }
}
#nginx
docker run -idt -e "TZ=Asia/Shanghai" --name nginx_nacos -v /root/docker/nginx_nacos/conf:/etc/nginx -v /root/docker/nginx_nacos/logs:/var/log/nginx -p 1111:80 --privileged=true --restart=always nginx

或者
另外要nginx监听端口改为 1111 
./nginx -c /usr/local/nginx/conf/nqinx. conf

 

8. 测试

配置验证

 

服务验证

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值