1-CloudAlibaba-Nacos(注册中心)学习笔记 2020.10.13

36 篇文章 2 订阅
13 篇文章 0 订阅

1-CloudAlibaba-Nacos(注册中心)学习笔记 2020.10.13

前言:

阿里的Nacos 为什么要使用他, 而不使用Eureka 或者 Consul 这些微服常用的注册中心。

阿里的Nacos优势在于更易于构建原生应用的动态服务发现、配置管理和服务管理平台。

简单的相当Nacos 拥有了注册中心(类似Eureka )与配置中心(CloudConfig) 加上CloudBus(实时刷新配置属性,生效)、3个功能技术的集合。

同时支持CP数据强一致性模式, 支持注册持久化实例, 该模式注册实例时必须先注册服务实例, 如果服务实例不存在则直接报错, 类似就是启动消费者的时候,引用到了提供者服务, 必须提供者服务先存在与注册中心, 否则直接报错。

同时也支持切换AP高可用模式, 为了可用性减弱了数据一致性, 所以仅支持临时实例,

0hEouQ.jpg

1.0 Docker环境下安装Nacos (官网)

1.1 下载Nacos镜像

docker pull nacos/nacos-server

1.2 启动Nacos容器 (使用内置derby数据库) (其他启动属性)

docker run -id --name nacos-standalone -e MODE=standalone -p 8848:8848  (镜像ID)

PS: -e MODE=standalone 表示是启动单机版本。

1.3 启动完成后进行访问

http://公网IP:8848/nacos/

如果能看到登录页面, 则说明服务正常启动了。

账号密码默认都是: nacos

2.0 使用Nacos作为服务注册中心

(SpringCloud官网Nacos官网)

2.1 新建提供者model/引入依赖

前面父POM文件已经引入了阿里的cloud版本锁定与管理, 所以子模块引入不需要指定版本。

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

Nacos 与其他注册中心技术一样, 集成了netflix-ribbon依赖, 自带负载均衡策略。

启动多个相同服务名的服务, 当消费者进行调用时候会默认使用轮询策略进行多台相同服务实例的调用。

2.2 编写application.yml配置文件增加Nacos属性

server:
  port: 9001

spring:
  application:
    name: nacos-provider # 服务名称
  cloud:
    nacos:
      discovery:
        server-addr: 公网IP:8848 #配置Nacos地址
# 开放监控管理路径
management:
  endpoints:
    web:
      exposure:
        include: '*'

2.3 主启动类/引导类上加上Cloud提供服务发现注解@EnableDiscoveryClient

@EnableDiscoveryClient // 增加服务发现注解
@SpringBootApplication
@RestController
public class NacosProvider
{
    public static void main(String[] args) {
            SpringApplication.run(NacosProvider.class, args);
    }
    
    @Value("${server.port}")
    private String serverPort;

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

2.4 启动服务进行测试

将提供者服务启动, 然后上Nacos管理界面上查看是否服务成功注册上去。

0hC2tO.jpg

3.0 新建消费model/引入依赖

<!--SpringCloud ailibaba nacos -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--SpringCloud openfeign -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

3.1 编写application.yml配置文件增加Nacos属性

server:
  port: 8080
  
spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 公网IP:8848

3.2 主启动类/引导类上加上Cloud提供服务发现注解与启用openfeign注解

@EnableDiscoveryClient
@SpringBootApplication // 启用服务发现
@EnableFeignClients // 启用openfeign
@RestController
public class NacosConsumer
{
    public static void main(String[] args)
    {
        SpringApplication.run(NacosConsumer.class,args);
    }
    
    @Autowired
    private FeginClient feginClient;
    
    @GetMapping(value = "/consumer/nacos/{id}")
    public String consumer(@PathVariable("id") Integer id)
    {
        //进行服务调用
        return feginClient.getPort(id);
    }
}

3.3 编写FeginClient接口

@FeignClient(name = "nacos-provider") //注解要指定服务名 _不能有下划线
public interface FeginClient {

    @GetMapping(value = "/nacos/{id}")
    public String getPort(@PathVariable("id") Integer id);
}

3.4 进行调用测试

http://localhost:8080/consumer/nacos/888

结果: (实现了默认的轮询策略调用)

nacos registry, serverPort: 9001 id888

nacos registry, serverPort: 9002 id888

扩展:

4.0 不使用内置,使用自定义MySQL数据库进行持久化配置 (所以需要我们自己配置)

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

1.安装数据库,版本要求:5.6.5+

2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql (数据库脚本官网链接)

4.1 连接上docker原有的MySQL数据库容器执行nacos-mysql.sql脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GYBBFicH-1602641521006)(%5B!%5B04KnmT.png%5D%28https://s1.ax1x.com/2020/10/13/04KnmT.png%29%5D%28https://imgchr.com/i/04KnmT%29#pic_center)]

4.2 带指定属性的启动Nacos容器 (启动属性说明)

指定我们的MySQL数据库。
查询MySQL容器IP : docker inspect (容器ID) | grep IPAddress
MYSQL_SERVICE_HOST=MySQL容器IP

docker run -id --name zhihai_nacos-standalone -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=172.17.0.3 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_DB_NAME=nacos -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=root -e JVM_XMS=320m -e JVM_XMX=320m -e JVM_XMN=128m -p 8848:8848  (镜像ID)

PS: 本人购买的虚拟机内存就2G , 在没加上启动属性: -e JVM_XMS=320m -e JVM_XMX=320m -e JVM_XMN=128m 的时候, 启动出现了以下错误。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PKgpNyqm-1602641659829)(%5B!%5B04bI0g.jpg%5D%28https://s1.ax1x.com/2020/10/14/04bI0g.jpg%29%5D%28https://imgchr.com/i/04bI0g%29#pic_center)]

找了好久, 我猜是Jvm分配内存过大的原因, 所以加上上面自定义启动属性来启动容器, 进行默认分配就正常启动了。
代表nacos很吃内存, 如果内存不大, 可能就需要考虑使用其他注册中心服务器。

Nacos 集群默认支持的是CAP原则中的AP原则,但是也可切换为CP原则,切换命令如下:

curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懵懵懂懂程序员

如果节省了你的时间, 请鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值