18.Nacos注册中心配置中心

1.SpringCloud Alibaba入门简介

1.1 Spring Cloud Netflix项目进入维护模式

Spring Cloud Netflix

什么是维护模式?
在这里插入图片描述进入维护模式意味着什么呢?
在这里插入图片描述在这里插入图片描述

1.2 SpringCloud alibaba带来了什么?

Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。

Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。

Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。

Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。

Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。

Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

官网

github:

中文文档:

2. Nacos简介

在这里插入图片描述
官网:

文档:

文档:

各种注册中心对比:
在这里插入图片描述
安装包下载地址:
在这里插入图片描述nacos后台:http://localhost:8848/nacos

3.Nacos作为服务注册中心演示

3.1 基于Nacos的服务提供者
3.1.1 新建Module cloudalibaba-provider-payment9001
3.1.2 修改pom

修改父pom

<!--spring cloud alibaba 2.1.0.RELEASE-->
<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>

修改子pom

<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </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>
        <scope>test</scope>
    </dependency><dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>
 </dependencies>
3.1.3 修改yml
server:
  port: 9001

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

management:
  endpoints:
    web:
      exposure:
        include: '*'
3.1.4修改主启动类与业务类
@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain9001.class,args);
    }
}

@RestController
public class PaymentController
{
    @Value("${server.port}")
    private String serverPort;

    @GetMapping(value = "/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id)
    {
        return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
    }
}
3.1.5 测试

http://lcoalhost:9001/payment/nacos/1

nacos服务注册中心+服务提供者9001都ok了

3.1.6新建cloudalibaba-provider-payment9002

为了下一章节演示nacos的负载均衡,参照9001新建9002。

投机取巧的方法:
在这里插入图片描述指定启动参数:-Dserver.port=9003

在这里插入图片描述然后在configured列表启动即可,上图apply后不会自动启动,而是在configured的列表

3.2 基于Nacos的服务消费者
3.2.1 新建Modulecloudalibaba-consumer-nacos-order83
3.2.2 改pom
<dependencies>
    <!--SpringCloud ailibaba nacos -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
        <dependency>
        <groupId>com.atguigu.springcloud</groupId>
        <artifactId>cloud-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>
        <scope>test</scope>
    </dependency>
</dependencies>

为什么nacos支持负载均衡?

因为nacos集成了ribbion
在这里插入图片描述

3.2.3改yml
server:
  port: 83

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

service-url:
  nacos-user-service: http://nacos-payment-provider
3.2.4 主启动与业务类
@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83
{
    public static void main(String[] args)
    {
        SpringApplication.run(OrderNacosMain83.class,args);
    }
}
@Configuration
public class ApplicationContextConfig
{
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate()
    {
        return new RestTemplate();
    }
}
@RestController
@Slf4j
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") Long id)
    {
        return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
    }
}
3.2.5 测试

nacos控制台:
在这里插入图片描述http://localhost:83/consumer/payment/nacos/13

83访问9001/9002,轮询负载OK

3.2.6 各种注册中心对比

nacos全景图:
在这里插入图片描述nacos与CAP
在这里插入图片描述
在这里插入图片描述Nacos支持AP和CP模式的切换

在这里插入图片描述curl -X PUT ‘$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’

4.Nacos作为服务配置中心演示

4.1 Nacos作为配置中心-基础配置
4.1.1 新建Module cloudalibaba-config-nacos-client3377
4.1.2 改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>
    <!--一般基础配置-->
    <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>
        <scope>test</scope>
    </dependency>
</dependencies>
4.1.3 改yml

在这里插入图片描述bootstrap.yml

server:
  port: 3377

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

application.yml

spring:
  profiles:
    active: dev
4.1.4 主启动和业务类
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}
@RestController
@RefreshScope
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

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

@RefreshScope注解:实现配置自动更新

4.2 在Nacos中添加配置信息

Nacos中的dataid的组成格式与SpringBoot配置文件中的匹配规则
官网:添加链接描述
在这里插入图片描述DataId
在这里插入图片描述在这里插入图片描述新增配置:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

4.3Nacos作为配置中心-分类配置

多环境多项目管理问题:
在这里插入图片描述
Nacos的图形化管理界面
配置管理:
在这里插入图片描述命名空间:
在这里插入图片描述Namespace+Group+Data ID三者关系?为什么这么设计?
在这里插入图片描述在这里插入图片描述分别通过DataID、Group、Namespace来区分不同的环境
在这里插入图片描述

DataID命名的时候带上环境,在application.yml中指定
spring:
  profiles:
    #active: dev
    active: dev

新建配置的时候指定group,在bootstrap.yml中指定group
config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yml #指定yaml格式的配置
        namespace: 9d3c51f6-c5c9-4d6f-b51e-77c2e995f693
        group: TEST_GROUP

新建namespace,在bootstrap.yml中指定

个人见解:可以使用namespace来区分不同的项目,使用dataId来区分同一项目下的不同微服务,使用group来区分统一项目同一微服务的不同环境。

5.Nacos集群和持久化配置(重要)

5.1Nacos持久化配置

在这里插入图片描述修改application.properties配置文件,增加数据库的配置,并且执行自带脚本,即可完成nacos的持久化配置。修改配置文件前应备份原有配置文件

spring.datasource.platform=mysql
 
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
5.2 Linux版Nacos+MySQL生产环境配置
5.2.1 官网说明

官网说明

参照官网来的生产环境架构图:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
预计需要,1个nginx+3个nacos注册中心+1个mysql
Nacos下载linux版本,tar.gz
在这里插入图片描述

5.2.2 现网搭建

1)Linux服务器上mysql数据库执行nacos脚本

2)application.properties增加数据库连接配置

3)Linux服务器上nacos的集群配置cluster.conf

梳理出3台nacos机器的不同服务端口号,复制出cluster.conf
在这里插入图片描述在这里插入图片描述
这个IP不能写127.0.0.1,必须是Linux命令hostname -i能够识别的IP

4)编辑Nacos的启动脚本startup.sh,使它能够接受不同的启动端

/mynacos/nacos/bin目录下有startup.sh
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述5)Nginx的配置,由它作为负载均衡器
在这里插入图片描述在这里插入图片描述在这里插入图片描述6)截止到此处,1个Nginx+3个nacos注册中心+1个mysql

https://服务器的ip:1111/nacos/#/login,新建一个配置文件,在数据库即可查询到
微服务cloudalibaba-provider-payment9002启动注册进nacos集群,将bootstarp.yml中的server-addr改为服务器地址,启动服务将服务注册进集群。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值