论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
云原生
›
微服务架构spring cloud+nacos举行配置管理(傻瓜教程 ...
微服务架构spring cloud+nacos举行配置管理(傻瓜教程 适合小白 避坑指南 ...
吴旭华
金牌会员
|
2025-1-20 07:40:03
|
显示全部楼层
|
阅读模式
楼主
主题
888
|
帖子
888
|
积分
2664
最近不停在折腾架构的事儿,之前开发的本领在逐步的恢复,今天给各人分享一下我在认识的过程一些技巧和遇到的一些坑
Nacos先容
Nacos各人想必都不会很陌生,他是alibaba开源的一个微服务中心件,支持服务注册和配置管理,相较于Eureka来说,nacos在性能和使用方面照旧比力合适国内开发者的,包括它的组件工具也比力全。
Nacos在做服务提供者(比方一个微服务实例)在启动时,会将自己的服务信息(如服务名称、IP 地址、端口号、服务的健康状态等)发送给 Nacos 服务器举行注册。比方,一个用户服务启动后,它会通过 Nacos 提供的客户端 SDK 大概相关的集成插件(如在 Spring Cloud Alibaba 中使用@EnableDiscoveryClient注解)将自身的信息注册到 Nacos 中,Nacos 会将这些信息存储在其服务注册表中。
Nacos 可以作为配置中心,集中存储应用程序的各种配置信息。这些配置可以是差别环境(如开发环境、测试环境、生产环境)下的配置文件,包括但不限于数据库连接信息、日志级别、服务的各种参数等。比方,将数据库连接的 URL、用户名和暗码等配置信息存储在 Nacos 中,配置文件可以是properties格式或yaml格式。
Nacos Server是 Nacos 的焦点折务器组件,负责处置处罚服务注册与发现、配置管理等焦点功能。它存储了服务注册表和配置信息,并且提供了相应的接口用于客户端的访问和操作。
Nacos Client是集成在应用程序中的客户端组件。它负责与 Nacos Server 举行通讯,将服务注册信息发送给服务器,从服务器获取服务发现信息和配置信息,并且接收服务器发送的配置更新通知等。比方,在 Java 应用中,通过引入 Nacos 的客户端依赖,使用相关的 API 来实现与 Nacos Server 的交互。
控制台(Dashboard)是Nacos 提供的一个可视化的控制台,通过浏览器访问控制台可以方便地对服务和配置举行管理。在控制台上,可以检察服务的注册信息、实例状态,举行配置的编辑、发布和管理等操作。比方,管理员可以在控制台上轻松地添加新的服务、修改配置文件,以及监控各个服务的运行状态。
安装Nacos
安装Nacos其实很简单,发起通过官网下载并安装,官网先容的步调非常过细,这里我就不过多先容。
官网地址: https://nacos.io/docs/next/quickstart/quick-start/
使用Nacos注册服务
我这里是创建了一个简单的微服务项目
因为微服务项目会有一个总的工程项目,以是我创建了一个父级的pom文件用来限定各个子项目使用的组件版本
<?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.leon.store</groupId>
<artifactId>store-examples</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>
</properties>
<!-- 依赖版本控制-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<modules>
<module>store-loginserver</module>
<module>store-core</module>
</modules>
</project>
复制代码
上面的POM文件是主工程的POM配置信息,下面的是我的store-loginserver服务的配置信息:
<?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>
<parent>
<groupId>com.leon.store</groupId>
<artifactId>store-examples</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<!-- 项目描述信息-->
<artifactId>store-loginserver</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>store-loginserver</name>
<!-- <name>SpringBootProject Maven Webapp</name>-->
<!-- <!– FIXME change it to the project's website –>-->
<!-- <url>http://www.example.com</url>-->
<!-- 项目中的一些属性变量,具有传递性-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- hystrix服务降级服务熔断-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.0.1.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
<exclusion>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
</exclusion>
<exclusion>
<groupId>com.netflix.archaius</groupId>
<artifactId>archaius-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 微服务依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--redis引用-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- FastJson 引用-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<!-- Mybatis-plus引用-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.9</version>
</dependency>
<!-- 数据库驱动-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.4</version>
</dependency>
<!-- HikariCP 连接池-->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.5</version>
<scope>compile</scope>
</dependency>
<!-- log4j2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!--nacos配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos服务注册与发现中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-spring-context</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
<build>
<finalName>store-loginserver</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
<mainClass>com.manage.project.ManageProject</mainClass>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
</includes>
</resource>
</resources>
</build>
</project>
复制代码
使用nacos作为注册中心时,肯定要留意不要忘记引用这两个pom,这是最为关键的,而且要留意版本,版本不合适的话会出现很多意想不到的问题
<!--nacos服务注册与发现中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
复制代码
各组件间版本关系我截图放在这里了,各人自行对比
接下来配置应用服务store-loginserver的配置信息,重要是配置nacos的注册信息
server:
port: 8081
spring:
application:
name: manageproject
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: 2fa09388-6a71-45df-870b-a910b159ce21
discovery:
enabled: true
复制代码
末了在主启动类加上@EnableDiscoveryClient 注解,在应用服务启动后,就能看到这个服务的注册环境啦
package com.manage.project;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
@MapperScan("com.manage.project.mapper")
public class ManageProject {
public static void main(String[] args){
try{
SpringApplication.run(ManageProject.class,args);
}catch(Exception e){
e.printStackTrace();
}
}
}
复制代码
当服务启动后,可以看到我的服务已经正常在Nacos服务列表里发现了。这里有的同学可能要问为什么服务名不是store-loginserver而是manageproject,这是因为在项目工程目录的application.yml文件中spring:application:name对应的值为managerproject,Nacos client发起注册时取的是该配置信息。
使用Nacos做配置中心
我不知道各人在实际工作中是否会将全部配置都放到配置中心,我的风俗是尽可能的将配置都放在配置中心,如许更便于配置管理,也不会出现测试环境打包的时候误将测试环境配置打到生产上(以前框架中没有使用配置中心的时候,已经被这个问题坑了很多多少次
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
吴旭华
金牌会员
这个人很懒什么都没写!
楼主热帖
mamba-ssm安装building wheel卡着不动 ...
《原CSharp》第二回 巧习得元素分类 子 ...
数据库系统课程设计(高校成绩管理数据 ...
使用TrueNas(FreeNas)进行华为手机备 ...
JVM虚拟机性能监控与故障处理工具(3) ...
Spark 总复习
java中==和equals区别
【图论】—— 有向图的强连通分量 ...
【云原生】第二篇--容器管理工具 Docke ...
Vue3-使用axios发起网络请求
标签云
挺好的
服务器
快速回复
返回顶部
返回列表