一些收藏K8sk8s

微服务架构 | 3.2 Alibaba Nacos 注册中心

2022-01-16  本文已影响0人  多氯环己烷

前言

参考资料
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服务原理与实战》
《B站 尚硅谷 SpringCloud 框架开发教程 周阳》
《Nacos 官网》

Nacos 致力于解决微服务中的统一配置、服务注册与发现等问题。它提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理;


1. Nacos 基础知识

1.1 Nacos 命名方式

1.2 Nasoc 是什么

1.3 Nacos 的 4 个关键特性

1.4 Nacos 生态图

Nacos 生态图.png

1.5 Nacos 架构图

Nacos 架构图.png 逻辑架构及其组件介绍.png

1.6 Nacos 支持 AP 和 CP 模式的切换

1.7 Nacos 文件结构说明

1.8 Nacos 服务注册与发现的源码分析

2. 安装并运行 Nacos 服务器

Nacos 依赖 Java 1.8 以上环境,有两种安装方式:使用已经编译好的安装包和源码部署;由于《*3.5 Nacos 服务注册与发现的源码分析》要对 Nacos 源码进行分析,这里推荐源码部署;
这里选择的版本是 2.0.3;

2.1 安装包安装 Nacos 服务器

2.1.1 下载 Nacos

下载 Nacos.png

2.1.2 直接运行报错

org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:156)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
Nacso 直接启动报错.png

2.1.3 修改启动方式后启动

修改 Nacos 为单机模式.png Nacos 登录.png 成功访问 Nacos.png

2.2 源码部署 Nacos 服务器

由于 2.0.3 版本笔者一直部署失败,因此这里以 1.4.2 版本为例;

2.2.1 下载源码

拉取 Nacos-1.4.2 源码.png 修改默认分支.png 修改默认分支为 1.4.2.png 拉取 Nacos-1.4.2 源码.png idea 拉取 Nacos-1.4.2 源码.png

2.2.2 本地编译

使用 idea 运行命令行.png Nacos-1.4.2 编译成功.png

2.2.3 修改配置

配置 JVM 启动参数.png

2.2.4 启动 Nacos

Nacos-1.4.2 源码启动成功.png

2.2.5 启动报错

3. 使用 Nacos 管理服务提供者

使用 Nacos 构建服务提供者大致与 Zookeeper 和 Consul 相同; Zookeeper 与 Consul 的构建方式详情请见《3.3 Apache Zookeeper 注册中心》与《3.4 HashiCorp Consul 注册中心》;

3.1 引入 pom.xml 依赖文件

<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>
<!--SpringCloud ailibaba nacos -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

3.2 修改 application.yml 配置文件

server:
  port: 9001

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

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

3.3 在主程序类上添加注解

3.4 编写业务类

这里编写一个简单接口仅作为示例;

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

    @RequestMapping(value = "/provider/nacos")
    public String providerNacos(){
        return "springcloud with nacos: "+serverPort+"\t"+ UUID.randomUUID().toString();
    }
}

4. 使用 Nacos 管理服务消费者

使用 Nacos 构建服务提供者大致与 Zookeeper 和 Consul 相同; Zookeeper 与 Consul 的构建方式详情请见《3.3 Apache Zookeeper 注册中心》与《3.4 HashiCorp Consul 注册中心》;

4.1 引入 pom.xml 依赖文件

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

4.2 修改 application.yml 配置文件

server:
  port: 80

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

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

4.3 在主程序类上添加注解

4.4 编写业务类

@Configuration
public class ApplicationContextBean{
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}
@RestController
public class ComsumerNacosController{
    public static final String INVOKE_URL = "http:// nacos-provider";

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/consumer/nacos")
    public String paymentInfo(){
        String result = restTemplate.getForObject(INVOKE_URL+"/provider/nacos", String.class);
        System.out.println("消费者调用提供者获取服务--->result:" + result);
        return result;
    }
}

5. Nacos 持久化配置

5.1 切换成 MySQL

#需要自己先创建数据库,再执行 sql 脚本;
CREATE DATABASE nacos_config;
USE nacos_config;
Nacos 执行 SQL 脚本.png

5.2 修改配置文件

Nacos 配置 MySQL 数据库.png
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

6. Nacos 的高可用部署

6.1 环境要求

6.2 安装包及环境准备

unzip nacos-server-2.0.3.zip

6.3 修改集群配置

cd ${NACOS_HOME}/config
cp cluster.conf.example cluster.conf
#ip:port
10.51.10.128:8848
10.51.10.129:8848
10.51.10.130:8848

6.4 初始化 MySQL

6.5 启动 Nacos 服务

2020-01-2814:26:25,654INFO Nacos Log files:/data/program/nacos/1ogs/
2020-01-2014:26:25,654 INFO Nacos Conf files:/data/program/nacos/conf/
2020-01-20 14:26:25,654 INFO Nacos Data files:/data/program/nacos/data/
2020-01-20 14:26:25,654 INFO Nacos started successfully in cluster mode.

7. 包含 Nginx 的 Nacos 高可用示例

包含 Nginx 的高可用示例.png

7.1 [可选] 修改 startup.sh 启动配置

#ip:port
192.168.111.144:3333
192.168.111.144:4444
192.168.111.144:5555
修改 startup.sh 启动配置.png

7.2 配置 Nginx 负载均衡器

修改 Nginx 的配置文件.png 按照指定启动.png

7.3 测试通过 Nginx 访问 Nacos

server:
  port: 9002

spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        #配置Nacos地址
        #server-addr: localhost:8848
        # 换成nginx的1111端口,做集群
        server-addr: 192.168.111.144:1111

management:
  endpoints:
    web:
      exposure:
        include: '*'
测试通过 Nginx 访问 Nacos.png

8. Dubbo 使用 Nacos 作为注册中心


最后

\color{blue}{\rm\small{新人制作,如有错误,欢迎指出,感激不尽!}}

\color{blue}{\rm\small{欢迎关注我,并与我交流!}}

\color{blue}{\rm\small{如需转载,请标注出处!}}

上一篇 下一篇

猜你喜欢

热点阅读