微服务nacos解析部署使用全流程

目录

[1、什么是Spring Cloud](#1、什么是Spring Cloud)

2、微服务和微服务架构

3、什么是Nacos

4、Nacos应用

1、基于Docker安装

2、注册中心

3、配置中心


1、什么是Spring Cloud

Spring Cloud是一系列框架的集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

2、微服务和微服务架构

微服务就是微小的服务,通过微服务思想,将原有的大而全的项目拆分成多个小而巧的项目,每个小的项目就是一个微服务,若干个微服务组成一个完整项目。微服务架构就是利用这种思想搭建的项目架构方式。

微服务架构可以提供高并发、高吞吐、高可用的特性。

3、什么是Nacos

Redirecting to: https://nacos.io/ 参考官方文档,不过多赘述。

nacos的两个核心功能:注册中心(发现中心)、配置中心(配置管理)

阿里旗下产品。Nacos是Spring Cloud Alibaba的开源组件之一,它不仅可以像Consul、Eureka那样作为注册中心,还可以像Spring Config那样作为远程的配置中心,并且,它还有很多自己的特性。

Nacos是一个开源的动态服务发现、配置管理和服务管理平台,由阿里巴巴集团开发并开源。它主要提供以下功能:

  1. **服务注册与发现**:Nacos允许服务在注册中心中注册自己,并通过服务名来发现其他服务,有助于实现微服务架构中的服务间通信。

  2. **配置管理**:提供了统一的配置管理平台,可以管理和动态更新分布式系统中的配置信息,如数据库连接、参数设置等。

  3. **动态DNS服务**:支持动态DNS服务,允许根据服务名动态解析到具体的IP地址,为服务调用提供更灵活的选择。

  4. **服务健康监测**:提供了健康检查功能,可以监测注册的服务是否健康,自动剔除不健康的实例。

  5. **权重和流量管理**:支持灰度发布和流量管理,可以实现不同版本的服务之间的流量切分和管理。

Nacos支持主流的服务生态,如Kubernetes Service、gRPC/Dubbo RPC Service或者Spring Cloud RESTful Service。它还支持服务元数据管理,包括服务端点、服务标签、服务版本号、服务实例权重、路由规则、安全策略等。

Nacos的架构包括服务注册中心、配置中心和动态DNS服务。服务注册中心是服务、其实例及元数据的数据库。服务实例在启动时注册到服务注册表,并在关闭时注销。服务和路由器的客户端查询服务注册表以查找服务的可用实例。

Nacos的客户端和服务器端交互包括客户端定时拉取服务端注册实例数据,以及服务端推送机制,当服务端注册数据发生变化时,通过UDP推送到客户端。

此外,Nacos还提供了一些简单的DNS APIs帮助管理服务的关联域名和可用的IP:PORT列表,支持权重路由,实现负载均衡和流量控制。

Nacos的快速开始手册提供了如何在电脑上下载、安装并使用Nacos的指导,包括启动服务器、服务注册与发现、配置管理和关闭服务器的命令。

总的来说,Nacos是一个功能丰富的服务发现和管理平台,适用于构建和管理微服务架构。

4、Nacos应用

1、基于Docker安装

#拉取docker镜像:

docker pull nacos/nacos-server:1.3.1

#创建挂载目录:

mkdir -p /usr/local/docker/nacos/init.d /usr/local/docker/nacos/logs

#安装nacos:

docker run -d \
-p 8848:8848 \
-e MODE=standalone \
-e PREFER_HOST_NAME=hostname \
-v /usr/local/docker/nacos/init.d:/home/nacos/init.d \
-v /usr/local/docker/nacos/logs:/home/nacos/logs \
--name nacos nacos/nacos-server:1.3.1

-e MODE=standalone:运行模式为单例模式,nacos支持集群,当前用单例运行

-e PREFER_HOST_NAME=hostname:以主机名启动,也可以用ip地址

2、注册中心

idea创建一个mavn项目

1.添加pom.xml依赖:

java 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.jr</groupId>
    <artifactId>nacos</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.7.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
        <jwt.version>0.7.0</jwt.version>
        <fastjson.version>1.2.60</fastjson.version>
        <spring-cloud-alibaba.version>2.0.3.RELEASE</spring-cloud-alibaba.version>
        <spring-cloud.version>Finchley.SR2</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2.编写bootstrap.yml配置文件:

是配置注册中心的,要优先于application.yml文件读取。

java 复制代码
#server-addr: 192.168.146.128:8848   端口号和虚拟机端口
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.146.128:8848

3.编写application.properties配置文件:

给当前工程取的名,用于在nacos中显示和管理。

java 复制代码
spring.application.name=nacos01

4.编写启动类

java 复制代码
package com.jr;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

如果不好用把启动器换到重com下换到jr下【主要启动器包的位置很重要】

http://192.168.146.128:8848/nacos/#/login 用自己的ip

3、配置中心

【1、创建或修改application.yml】

java 复制代码
##修改端口号
server:
  port: 99

common:
  name: zhangsan
  age: 20

【2、创建控制器】

java 复制代码
package com.jr.controller;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value; //注意这一项
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
@Setter
public class UserController {

    @Value("${common.name}")
    private String name;

    @Value("${common.age}")
    private Integer age;

    @GetMapping
    public String test(){
        return name+"----"+age;
    }

}

【3、启动,访问】

【4、添加maven依赖】在pom.xml中

java 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

【5、创建命名空间】

【注意:上图里的'命名空间ID',一会粘贴在idea项目配置文件中。】

【6、配置中心添加配置文件】

【注意:下图中的Data ID ,为自定义。但是要有.yaml后缀】

java 复制代码
common:
  name: lisi

【在配置一个】

java 复制代码
common:
  age: 25

【7、修改bootstrap.yml配置文件】

java 复制代码
#server-addr: 192.168.146.128:8848   端口号和虚拟机端口
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.146.128:8848
      config:
        server-addr: 192.168.146.128:8848
        file-extension: yaml
        namespace: eeb6168d-fa2b-4d8e-9ba4-c6dc0e5a937a
        shared-configs:
            - data-id: gb1.yaml
              group: DEFAULT_GROUP
            - data-id: gb2.yaml
              group: DEFAULT_GROUP
    inetutils:
      preferred-networks: 192.168.146

【注意这是我笔记图片,和本片文章ip id 网段 并不匹配】

此图主要告知每个位置写什么

server-addr:nacos服务ip及端口

file-extension:配置文件类型

namespace:命名空间,在nacos页面中创建,用来管理配置文件

shared-configs:配置中心配置

data-id:配置文件唯一标识

group:配置文件分组

preferred-networks:设置微服务的网段

【8、查看上步操作中,获得注册中心里的网段】

192.168.146.55(我的这次做的)

注意我的这张图和我的对不上,这是我笔记里面的截图

【9、重新启动项目,再次访问】

获得配置中心里的值了。(配置中心里有的值,读配置中心;配置中心没有的值,读本地;本地也没有,报错。)

localhost:99/user (端口号/@RequestMapping("/user")控制层路由)

相关推荐
软件2054 分钟前
【工具类:FastJsonRedisSerializer】
java
fanhaifeng6613 分钟前
SpringCloud Gateway 打印请求响应日志、跨域全局配置
spring·spring cloud·gateway
编啊编程啊程30 分钟前
一文上手SpringSecurity【九】
java·spring boot·redis·spring cloud·json
2401_857610031 小时前
Spring Boot 点餐系统:一键订餐解决方案
java·spring boot·后端
尘浮生1 小时前
Java项目实战II基于Java+Spring Boot+MySQL的新闻稿件管理系统(源码+数据库+文档)
java·开发语言·数据库·spring boot·mysql·maven·intellij-idea
希忘auto1 小时前
详解Java之继承与多态
java
WHabcwu1 小时前
Spring Web MVC课后作业
java·前端·后端·spring·html·mvc
程序员大金2 小时前
基于SpringBoot+Vue+MySQL的在线酷听音乐系统
java·前端·javascript·vue.js·spring boot·后端·mysql
一棵猿2 小时前
DC00022基于ssm高校社团管理系统web社团管理系统java web+MySQL项目web程序设计
java·开发语言·mysql·ssm·计算机毕业设计·计算机课程设计·java web项目编程
林小果12 小时前
备忘录模式
java·开发语言·设计模式·备忘录模式