Nacos服务注册与服务配置

一、nacos安装

1、windows安装

  1. nacos官网:https://nacos.io/zh-cn/

在这里插入图片描述
2. 下载nacos:前往GitHub页面选择zip进行下载。(centos的下一节讲)
在这里插入图片描述

  1. 解压后的目录如下:
    在这里插入图片描述
  2. 进入bin目录后打开控制台,输入“startup.cmd -m standalone”命令来启动nacos(standalone代表单机执行)
    在这里插入图片描述
  3. 浏览器输入:http://localhost:8848/nacos
    用户名密码都是nacos
    在这里插入图片描述
    在这里插入图片描述

2、contos安装

参考我的另外一篇文章:centos8安装nacos2.0.3

更多关于nacos的操作,跳转官网查看对应文档:Nacos快速开始

二、nacos作为服务注册中心演示(服务提供者)

1、新建module:cloudalibaba-provider-payment9001

在这里插入图片描述

2、pom文件

父pom:

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

本模块的pom:

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.7.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>2.7.1</version>
        </dependency>

        <!--SpringBoot启动时报错,需要引入以下依赖-->
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.13.3</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.3</version>
        </dependency>


        <!--nacos服务注册-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

3、application.yml

server:
    port: 9001

spring:
    application:
        name: nacos-payment-provider
    cloud:
        nacos:
            discovery:
                server-addr: localhost:8848
management:
    endpoints: 
        web:
            exposure: 
                include: '*'

4、启动类

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

5、业务类

@RestController
public class PaymentController {

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

    @GetMapping("/payment/nacos/{id}")
    public String getServerPort(@PathVariable("id") Integer id){
        return "Nacos Provider registry, serverPort:" + serverPort + "id: " + id;
    }
}

6、测试

直接启动该模块,然后去nacos–服务列表–服务查看上可以看到:
在这里插入图片描述
至此我们nacos的服务注册中心和服务提供者9001都ok了

7、创建第二个服务提供者9002

这里不想写代码,因此直接复制一份服务提供者9001,更改端口为9002然后启动
在这里插入图片描述

在这里插入图片描述

此时我们可以看到nacos服务注册已经搭配好集群模式:

在这里插入图片描述

三、nacos作为服务注册中心演示(服务消费者)

1、新建module:cloudalibaba-consumer-nacos-order9003

2、pom文件

照搬服务注册中心的pom文件,并添加其他依赖:

 <!-- 需要手动指定loadbalancer版本,
 这里注意要和org.springframework.cloud:spring-cloud-commons版本统一 -->
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-loadbalancer</artifactId>
     <version>3.1.1</version>
 </dependency>

3、application.yml

server:
    port: 9003

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

#消费者将要去访问的微服务者名称
service-url:
    nacos-user-service: http://nacos-payment-provider

4、启动类

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

5、配置类

这里我们需要使用Loadbalancer+RestTemplate来进行负载均衡,因此需要配置这个类

@Configuration
public class ApplicationContextConfig {

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

6、业务类

@RestController
public class OrderNacosController {

    @Resource
    private RestTemplate restTemplate;

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

    @GetMapping(value = "/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Integer id) {
        return restTemplate.getForObject(serverUrl+"/payment/nacos/"+id,String.class);
    }
}

7、启动并查看nacos

在这里插入图片描述

8、测试:http://localhost:9003/consumer/payment/nacos/1

多次刷新该请求,可以看到已经实现负载均衡
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

四、nacos作为服务配置中心

替代了Cloud Config和Cloud Bus的组合,更加方便

1、新建module:cloudalibaba-config-nacos-client3377

在这里插入图片描述

2、pom文件

    <dependencies>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.yaml</groupId>
                    <artifactId>snakeyaml</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.7.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.yaml</groupId>
                    <artifactId>snakeyaml</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--spring-boot-starter-web与 cloud中的版本冲突,因此这里统一版本-->
        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
            <version>1.30</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>2.7.1</version>
        </dependency>

        <!--避免出现bootstrap配置无效的情况-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.3</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

3、bootstrap.yml

优先级比application高,这里设置统一配置

# nacos配置
server:
  port: 3377
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yaml

4、application.yml

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

5、启动类

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

6、业务类

@RestController
@RefreshScope //通过cloud的原生注解来支持Nacos的动态刷新功能
public class ConfigClientController {

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

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

7、在nacos进行配置

配置规则参考nacos官方文档:

在这里插入图片描述
然后我们进入自己的nacos进行新建:

在这里插入图片描述

7、测试

  1. nacos配置中心配置完成
  2. 启动我们的项目并进行测试http://localhost:3377/config/info
    在这里插入图片描述
  3. 修改配置中心的配置信息,然后再次访问http://localhost:3377/config/info

在这里插入图片描述
在这里插入图片描述

五、nacos的分类配置

1、Namespace+Group+Data ID三者关系?为什么这么设计?

在这里插入图片描述

(1)是什么

类似Java里面的package名和类名,最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。

(2)三者情况

默认情况:Namespace=public,Group=DEFAULT_GROUP, 默认Cluster是DEFAULT

Nacos默认的命名空间是public,Namespace主要用来实现隔离。比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。 Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去 Service就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。 最后是Instance,就是微服务的实例。

2、DataID配置

在这里插入图片描述

(1)nacos新建test

在这里插入图片描述

(2)修改application.yml

在这里插入图片描述

(3)重启测试

在这里插入图片描述

3、Group分组方案

在这里插入图片描述

(1)新建dev_group

在这里插入图片描述

(2)新建test_group

在这里插入图片描述
在这里插入图片描述

(3)修改application.yml

在这里插入图片描述

(4)修改bootstrap.yml为自己想要的group

在这里插入图片描述

(5)重启测试

在这里插入图片描述

4、Namespace空间方案

在这里插入图片描述

(1)新建命名空间

在这里插入图片描述

最终效果:

在这里插入图片描述

在这里插入图片描述

(2)修改bootstrap.yml

这个namespace对应的值就是我们在nacos中的命名空间ID
在这里插入图片描述

(3)修改application.yml

在这里插入图片描述

(4)在dev的命名空间下新建配置

在这里插入图片描述

(5)重启测试

在这里插入图片描述

六、nacos持久化

在0.7版本之前,在单机模式时nacos使用嵌入式数据库derby实现数据的存储,不方便观察数据存储的基本情况,而且在集群模式下我们无法保证数据一致性。
在这里插入图片描述

因此0.7版本以后增加了支持mysql数据源能力,具体的操作步骤:

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

在这里插入图片描述
然后修改application.properties中的数据库配置:

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow

然后重新启动,这样我们就可以把数据持久化到MySQL指定数据库中

七、nacos集群

1、集群部署架构图

在这里插入图片描述

自己的理解:

在这里插入图片描述

2、步骤总结

这里不进行赘述,我们可以理解成需要通过nginx访问nacos集群,放官方文档说明:集群部署说明
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值