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

news2024/11/18 7:30:03

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依赖:

<?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文件读取。

#server-addr: 192.168.146.128:8848   端口号和虚拟机端口
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.146.128:8848

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

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

spring.application.name=nacos01

4.编写启动类

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】

##修改端口号
server:
  port: 99

common:
  name: zhangsan
  age: 20

【2、创建控制器】

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中

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

【5、创建命名空间】

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

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

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

common:
  name: lisi

【在配置一个】

common:
  age: 25

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

#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")控制层路由)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2169531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stm32入门——GPIO输入输出(1)基础理解

最近比较想上进&#xff0c;又不知道要干什么&#xff0c;就来水几篇博客欺骗一下自己。 GPIO全称是&#xff1a;General Purpose Input / Output ,是stm32用于控制输入和输出信号的通用接口。我们用的MCU都有这玩意&#xff0c;比如STM32F103C8T6上有 GPIOA&#xff0c;GPIOB&…

算法葫芦书(笔试面试)

一、特征工程 1.特征归一化&#xff1a;所有特征统一到一个区间内 线性函数归一化&#xff08;0到1区间&#xff09;、零均值归一化&#xff08;均值0&#xff0c;标准差1&#xff09; 2.类比型特征->数值性特征 序号编码、独热编码、二进制编码&#xff08;010&#xf…

prd文档编写(to b)

如何编写产品需求文档&#xff08;PRD&#xff09; | 人人都是产品经理 (woshipm.com) 一.prd文档编写得目的 PRD文档最为重要的目的就是&#xff1a;协调各个相关角色 PRD就是提高效率的&#xff0c;把各个角色的共识全部写出来&#xff0c;大家都已PRD为最终的工作指导文档…

2:数据结构:列表与元组

目录 2.1 列表的创建与操作 2.1.1 列表的创建 2.1.2 列表的常用操作 2.1.3 列表切片操作 2.2 元组的特点与用法 2.2.1 元组的创建 2.2.2 元组与列表的区别 2.2.3 元组的常用操作 2.3 示例代码与练习 2.3.1 示例代码&#xff1a;列表与元组的基本操作 2.3.2 练习题 文…

ICM20948 DMP代码详解(46)

接前一篇文章&#xff1a;ICM20948 DMP代码详解&#xff08;45&#xff09; 上一回讲到了inv_icm20948_setup_compass_akm函数中的以下代码片段&#xff1a; /* Set compass in power down through I2C SLV for compass */result inv_icm20948_execute_write_secondary(s, COM…

网口为什么叫RJ45接口,名字的由来?

大家有没有注意到很多地方“网口”都被称作“RJ45”接口。但是&#xff0c;您是否曾经好奇过&#xff0c;这个小小的插孔为何被称为“RJ-45”&#xff1f;这个名字背后又有着怎样的故事呢&#xff1f; RJ-45的全称与定义 首先&#xff0c;我们需要了解“RJ-45”的全称是“Regi…

jetlinks物联网平台学习3:mqtt协议及物模型

mqtt协议及物模型 1、创建产品2、配备设备接入方式3、上传消息协议4、填写网关信息5、配置mqtt认证信息6、配置物模型7、创建设备8、使用MQTT X模拟设备接入9、mqttx实现设备->平台 平台->设备 消息发送9.1、属性上报9.2、获取最新属性值&#xff08;读取属性&#xff09…

EEPROM手册笔记

目录 一、特征描述二、功能描述三、总线特性四、设备寻址五、写入操作1.字节写入2.页写入 六、读取操作1.当前地址读取2.随机读取3.顺序读取 一、特征描述 1.Microchip Technology Inc. 24AA04/24LC04B &#xff08;24XX04*&#xff09; 是一款 4 Kbit 电气可擦除 PROM。该器件…

ChatDev:基于对话的多智能体协同软件开发框架

相关代码资源见文末 论文地址:ChatDev: Communicative Agents for Software Development - ACL Anthologyhttps://aclanthology.org/2024.acl-long.810/ 1. 概述 1.1. 当前的挑战 软件开发是一个复杂且多层次的过程,要求具备不同技能的团队成员之间密切合作。例如,架构师…

老人跌倒扶不扶?涪城三职工给出响亮答案

一、关键时刻的选择 于绵阳市三江湖湿地公园&#xff0c;平凡午后&#xff0c;三名环卫人员刘后刚、严荣礼及杨树坤正紧张作业。突闻呼救声&#xff0c;一位老人在石阶上跌倒需援手。在紧急关头&#xff0c;他们果断抛却工具&#xff0c;疾速赶至老人身边。此举不仅展现了他们…

了解网络的相关信息

文章目录 前言了解网络的相关信息1. ip是什么?1.1. 公网IP:1.2. 私有IP:1.2.1. 示例 2. 子网掩码3. 子网掩码的划分网段是什么4. 特殊的回路IP网段(127.0.0.1)5. 端口 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#x…

学习C++的第七天!

1.虚函数是在基类中用 virtual 关键字声明的函数&#xff0c;可以在派生类中被重写。纯虚函数是在虚函数的基础上&#xff0c;在基类中被初始化为 0 的函数&#xff0c;含有纯虚函数的类是抽象类&#xff0c;不能被实例化。 2.如果基类的析构函数不是虚函数&#xff0c;当通过…

(done TODO:从频谱到时域要考虑负频波和余弦波?) 傅里叶变换知识补充

参考&#xff1a;https://www.bilibili.com/video/BV1rC4y1E7FD/?vd_source7a1a0bc74158c6993c7355c5490fc600 sinx 和 sin2x sin3x 等整数倍频率的正弦波都是正交的 cosx 和 cos2x cos3x 等整数倍频率的余弦波都是正交的 这成为三角函数系的正交性 up主从分解出来的波恢复成…

buuctf [ACTF2020 新生赛]Include

学习笔记。 开启靶机。 进入靶场&#xff1a; 我们跟进 tips瞅瞅&#xff1a; 额&#xff0c;纯小白&#xff0c;能想到的就是先F12看看&#xff0c;在CTRLu、以及抓包。 得&#xff0c;不会了&#xff0c;看wp呗&#xff0c;不会死磕没脑子0,0&#xff1f; 参考&#xff1a;…

解决 Adobe 盗版弹窗

在这个文件夹下删除 Adobe CCXProcess 然后重装。 Adobe Premiere Pro 2024 (v24.6.1) Multilingual :: Варез от m0nkrusa [Warez by m0nkrus] (monkrus.ws) Adobe Photoshop 2024 (v25.12) Multilingual :: Варез от m0nkrusa [Warez by m0nkrus] (monkrus.…

FastAPI 第五课 -- 基本路由

目录 一. 前言 二. 根路径路由 三. 路径参数 四. 启动应用和测试路由 一. 前言 在 FastAPI 中&#xff0c;基本路由是定义 API 端点的关键。每个路由都映射到应用程序中的一个函数&#xff0c;用于处理特定的 HTTP 请求&#xff0c;并返回相应的响应。 二. 根路径路由 创…

矩阵求逆的几种方法

1. 定义 对于矩阵的运算中定义了加减法、乘法&#xff08;包含数乘&#xff09;但未定义矩阵除法&#xff0c;可以简单认为矩阵的逆即为矩阵除法。矩阵求逆是线性代数中的一个重要概念&#xff0c;在很多应用领域都有广泛的应用。对于一个给定的方阵 ( A )&#xff0c;如果存在…

全志A133开发板安卓系统调试串口复用成普通串口方法-触觉智能EVB1309

本文介绍了在开发板/主板串口接口不够的情况下&#xff0c;可将调试串口改为普通串口使用&#xff0c;下面为大家分享修改方法。基于触觉智能EVB1309开发板演示&#xff0c;搭载全志A133芯片&#xff0c;具有高性能超低功耗优势&#xff0c;待机功耗低至15mW。 1、内核配置 源…

FortiGate 无线组网

无线管理与配置 FortiAP 连接 internal 接口之后自动获得 ip 地址&#xff1a;192.168.1.xxx/24在 FortiGate 中创建 SSIDFortiGate 自动发现 FortiAP&#xff0c;将 FortiAP 添加到 FortiGate将 SSID 和 FortiAP 关联创建防火墙策略 下面我们就来一起看看在 FortiGate 中该如…

【HTTP 和 HTTPS详解】3

HTTP 状态代码 HTTP 状态代码是服务器发送给客户端的三位数字&#xff0c;用于指示客户端请求的结果。它们分为五类&#xff1a;信息性&#xff08;100-199&#xff09;、成功&#xff08;200-299&#xff09;、重定向&#xff08;300-399&#xff09;、客户端错误&#xff08…