搭建nacos环境(保姆级教程)

news2024/11/19 12:37:14

2.2.1 服务发现中心

根据上节讲解的网关的架构图,要使用网关首先搭建Nacos。

首先搭建Nacos服务发现中心。

在搭建Nacos服务发现中心之前需要搞清楚两个概念:namespace和group

namespace:用于区分环境、比如:开发环境、测试环境、生产环境。

group:用于区分项目,比如:xuecheng-plus项目、xuecheng2.0项目

首先在nacos配置namespace:

登录Centos,启动Naocs,使用sh /data/soft/restart.sh将自动启动Nacos。

访问:http://192.168.101.65:8848/nacos/

账号密码:nacos/nacos

登录成功,点击左侧菜单“命名空间”进入命名空间管理界面,

点击“新建命名空间”,填写命名空间的相关信息。如下图:

使用相同的方法再创建“测试环境”、"生产环境"的命名空间。

创建成功,如下图:

这里创建具体班级的命名空间,假如创建1010班级的命名空间,如下:

首先完成各服务注册到Naocs,下边将内容管理服务注册到nacos中。

1) 在xuecheng-plus-parent中添加依赖管理

XML com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring-cloud-alibaba.version} pom import

2)在内容管理模块的接口工程、系统管理模块的接口工程中添加如下依赖

XML com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery

3)配置nacos的地址

在系统管理的接口工程的配置文件中配置如下信息:

YAML#微服务配置 spring: application: name: system-service cloud: nacos: server-addr: 192.168.101.65:8848 discovery: namespace: dev group: xuecheng-plus-project

在内容管理的接口工程的配置文件中配置如下信息:

YAMLspring: application: name: content-service cloud: nacos: server-addr: 192.168.101.65:8848 discovery: namespace: dev group: xuecheng-plus-project

4)重启内容管理服务、系统管理服务。

待微服务启动成功,进入Nacos服务查看服务列表

在 “开发环境” 命名空间下有两个服务实例。微服务在Nacos注册成功。

点击其它一个微服务的“详情”

通过上图可以查看微服务实例的地址。

2.2.2 配置中心

2.2.2.1 配置三要素

搭建完成Nacos服务发现中心,下边搭建Nacos为配置中心,其目的就是通过Nacos去管理项目的所有配置。

先将项目中的配置文件分分类:

1、每个项目特有的配置

是指该配置只在有些项目中需要配置,或者该配置在每个项目中配置的值不同。

比如:spring.application.name每个项目都需要配置但值不一样,以及有些项目需要连接数据而有些项目不需要,有些项目需要配置消息队列而有些项目不需要。

2、项目所公用的配置

是指在若干项目中配置内容相同的配置。比如:redis的配置,很多项目用的同一套redis服务所以配置也一样。

另外还需要知道nacos如何去定位一个具体的配置文件,即配置的三要素:namespace、group、dataid.

1、通过namespace、group找到具体的环境和具体的项目。

2、通过dataid找到具体的配置文件,dataid有三部分组成,

比如:content-service-dev.yaml配置文件 由(content-service)-(dev). (yaml)三部分组成

content-service:第一部分,它是在application.yaml中配置的应用名,即spring.application.name的值。

dev:第二部分,它是环境名,通过spring.profiles.active指定,

Yaml: 第三部分,它是配置文件 的后缀,目前nacos支持properties、yaml等格式类型,本项目选择yaml格式类型。

所以,如果我们要配置content-service工程的配置文件:

在开发环境中配置content-service-dev.yaml

在测试环境中配置content-service-test.yaml

在生产环境中配置content-service-prod.yaml

2.2.2.2 配置content-service

下边以开发环境为例对content-service工程的配置文件进行配置,进入nacos,进入开发环境。

点击 加号,添加一个配置

输入data id、group以及配置文件内容。

为什么没在nacos中配置下边的内容 ?

YAMLspring: application: name: content-service

因为刚才说了dataid第一部分就是spring.application.name,nacos 客户端要根据此值确定配置文件 名称,所以spring.application.name不在nacos中配置,而是要在工程的本地进行配置。

本地配置文件现在是application.yaml需要修改为bootstrap.yaml,因为SpringBoot读取配置文件 的顺序如下:

所以在content-service工程 中添加bootstrap.yaml,内容如下:

YAMLspring: application: name: content-service cloud: nacos: server-addr: 192.168.101.65:8848 discovery: namespace: ${spring.profiles.active} group: xuecheng-plus-project config: namespace: ${spring.profiles.active} group: xuecheng-plus-project file-extension: yaml refresh-enabled: true #profiles默认为dev profiles: active: dev

最后删除原来的application.yaml。

在内容管理模块的接口工程和service工程、系统管理的接口工程和service工程配置依赖:

XML com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config

配置完成,运行content-service工程 的单元测试文件,能否正常测试。

通过运行观察控制台打印出下边的信息:

Plain Text[NacosRestTemplate.java:476] - HTTP method: POST, url: http://192.168.101.65:8848/nacos/v1/cs/configs/listener, body: {Listening-Configs=content-service.yaml?xuecheng-plus-project??dev?content-service-dev.yaml?xuecheng-plus-project?88459b1483b8381eccc2ef462bd59182?dev?content-service?xuecheng-plus-project??dev?, tenant=dev}

NacosRestTemplate.java通过Post方式去nacos读取配置信息。

跟踪单元测试方法可以正常读取数据库的数据,说明从nacos读取配置信息正常。

2.2.2.3配置content-api

以相同的方法配置content-api工程的配置文件,在nacos中的开发环境中配置content-api-dev.yaml,内容如下:

YAMLserver: servlet: context-path: /content port: 63040 # 日志文件配置路径 logging: config: classpath:log4j2-dev.xml # swagger 文档配置 swagger: title: “学成在线内容管理系统” description: “内容系统管理系统对课程相关信息进行业务管理数据” base-package: com.xuecheng.content enabled: true version: 1.0.0

在content-api工程 的本地配置bootstrap.yaml,内容如下:

YAML#server: # servlet: # context-path: /content # port: 63040 #微服务配置 spring: application: name: content-api cloud: nacos: server-addr: 192.168.101.65:8848 discovery: namespace: ${spring.profiles.active} group: xuecheng-plus-project config: namespace: s p r i n g . p r o f i l e s . a c t i v e g r o u p : x u e c h e n g − p l u s − p r o j e c t f i l e − e x t e n s i o n : y a m l r e f r e s h − e n a b l e d : t r u e e x t e n s i o n − c o n f i g s : − d a t a − i d : c o n t e n t − s e r v i c e − {spring.profiles.active} group: xuecheng-plus-project file-extension: yaml refresh-enabled: true extension-configs: - data-id: content-service- spring.profiles.activegroup:xuechengplusprojectfileextension:yamlrefreshenabled:trueextensionconfigs:dataid:contentservice{spring.profiles.active}.yaml group: xuecheng-plus-project refresh: true profiles: active: dev # 日志文件配置路径 logging: config: classpath:log4j2-dev.xml # swagger 文档配置 swagger: title: “学成在线内容管理系统” description: “内容系统管理系统对课程相关信息进行业务管理数据” base-package: com.xuecheng.content enabled: true version: 1.0.0

注意:因为api接口工程依赖了service工程 的jar,所以这里使用extension-configs扩展配置文件 的方式引用service工程所用到的配置文件。

YAML extension-configs: - data-id: content-service-${spring.profiles.active}.yaml group: xuecheng-plus-project refresh: true

如果添加多个扩展文件,继续在下添加即可,如下:

YAML extension-configs: - data-id: content-service-${spring.profiles.active}.yaml group: xuecheng-plus-project refresh: true - data-id: 填写文件 dataid group: xuecheng-plus-project refresh: true

启动content-api工程,查询控制台是否打印出了请求nacos的日志,如下:

Bash[NacosRestTemplate.java:476] - HTTP method: POST, url: http://192.168.101.65:8848/nacos/v1/cs/configs/listener

并使用Httpclient测试课程查询接口是否可以正常查询。

2.2.3 公用配置

还有一个优化的点是如何在nacos中配置项目的公用配置呢?

nacos提供了shared-configs可以引入公用配置。

在content-api中配置了swagger,所有的接口工程 都需要配置swagger,这里就可以将swagger的配置定义为一个公用配置,哪个项目用引入即可。

单独在xuecheng-plus-common分组下创建xuecheng-plus的公用配置,进入nacos的开发环境,添加swagger-dev.yaml公用配置

删除接口工程中对swagger的配置。

项目使用shared-configs可以引入公用配置。在接口工程的本地配置文件 中引入公用配置,如下:

YAMLspring: application: name: content-api cloud: nacos: server-addr: 192.168.101.65:8848 discovery: namespace: dev group: xuecheng-plus-project config: namespace: dev group: xuecheng-plus-project file-extension: yaml refresh-enabled: true extension-configs: - data-id: content-service- s p r i n g . p r o f i l e s . a c t i v e . y a m l g r o u p : x u e c h e n g − p l u s − p r o j e c t r e f r e s h : t r u e s h a r e d − c o n f i g s : − d a t a − i d : s w a g g e r − {spring.profiles.active}.yaml group: xuecheng-plus-project refresh: true shared-configs: - data-id: swagger- spring.profiles.active.yamlgroup:xuechengplusprojectrefresh:truesharedconfigs:dataid:swagger{spring.profiles.active}.yaml group: xuecheng-plus-common refresh: true - data-id: logging-${spring.profiles.active}.yaml group: xuecheng-plus-common refresh: true profiles: active: dev

再以相同 的方法配置日志的公用配置。

在接口工程和业务工程,引入loggin-dev.yaml公用配置文件

配置完成,重启content-api接口工程,访问http://localhost:63040/content/swagger-ui.html 查看swagger接口文档是否可以正常访问,查看控制台log4j2日志输出是否正常。

2.2.4 系统管理配置

按照上边的方法 自行将系统管理服务的配置信息在nacos上进行配置。

2.2.5 配置优先级

到目前为止已将所有微服务的配置统一在nacos进行配置,用到的配置文件有本地的配置文件 bootstrap.yaml和nacos上的配置文件,引入配置文件的形式有:

1、通过dataid方式引入

2、以扩展配置文件方式引入

3、以共享配置文件 方式引入

下边测试这几种配置文件方式的优先级。

我们使用内容管理服务中的配置文件,首先在共享配置文件 swagger-dev.yaml中配置四个配置项,如下:

配置完成发布。

下边在content-api工程的启动类中添加如下代码读取这四个配置项的值

Javapackage com.xuecheng; import com.spring4all.swagger.EnableSwagger2Doc; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @EnableSwagger2Doc @SpringBootApplication public class ContentApplication { @Value(“ t e s t c o n f i g . a " ) S t r i n g a ; @ V a l u e ( " {test_config.a}") String a; @Value(" testconfig.a")Stringa;@Value("{test_config.b}”) String b; @Value(“ t e s t c o n f i g . c " ) S t r i n g c ; @ V a l u e ( " {test_config.c}") String c; @Value(" testconfig.c")Stringc;@Value("{test_config.d}”) String d; @Bean public Integer getTest(){ System.out.println(“a=”+a); System.out.println(“b=”+b); System.out.println(“c=”+c); System.out.println(“d=”+d); return new Integer(1); } public static void main(String[] args) { SpringApplication.run(ContentApplication.class, args); } }

启动content-api工程,在return new Integer(1);处打断点,运行到断点处,如下:

这说明已经成功读取到 四个配置项的值。

下边在content-api工程的扩展配置文件 conent-service-dev.yaml中配置三个配置项,如下:

再次重启content-api工程,在return new Integer(1);处打断点,运行到断点处,如下:

从结果可以看出,扩展配置文件比共享配置文件优先级高。

下边继续content-api-dev.yaml中配置两个配置项,如下:

再次重启内容管理接口工程,在return new Integer(1);处打断点,运行到断点处,如下:

从结果可以看出,通过工程的应用名找到配置文件 content-api-dev.yaml优先级比扩展配置文件 高。

下边我们在content-api工程的本地配置文件bootstrap.yaml中配置如下:

YAMLtest_config: a: 4a b: 4b c: 4c d: 4d

再次重启内容管理接口工程,在return new Integer(1);处打断点,运行到断点处,如下:

这说明本地配置文件配置的内容没有起作用,原因是nacos配置文件中的相同的配置项覆盖了本地的配置项。

到这可以总结各各配置文件 的优先级:项目应用名配置文件 > 扩展配置文件 > 共享配置文件 > 本地配置文件。

有时候我们在测试程序时直接在本地加一个配置进行测试,这时我们想让本地最优先,可以在nacos配置文件 中配置如下即可实现:

YAML#配置本地优先 spring: cloud: config: override-none: true

再次重启content-api工程,在return new Integer(1);处打断点,运行到断点处,如下:

可以看出此时本地配置最优先。

2.2.6 导入配置文件

课程资料中提供了系统用的所有配置文件nacos_config_export.zip,下边将nacos_config_export.zip导入nacos。

进入具体的命名空间,点击“导入配置”

打开导入窗口

相同的配置选择覆盖配置。

点击“上传文件”选择nacos_config_export.zip开始导入。

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

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

相关文章

【Linux】进程间管道通信、线程池

目录 一、进程间通信的概念 二、匿名管道 2.1 什么是管道 2.2 管道的实现 2.3 管道的使用 三、进程池 3.1 进程池实现逻辑 3.2 模拟任务表 3.3 进程池的创建 四、命名管道 4.1 创建命名管道 4.2 命令管道的使用 一、进程间通信的概念 进程具有独立性,…

面试系列:单点登录的知识(一)

大家好,我是车辙,由于目前接手的业务涉及到了单点登录,所以一直在疯狂的去补充这方面的知识。也写下了这篇面试形式的文章,写的不好大家轻点 Diss。 面试开始 在焦急的等待中,一位看上去比较年轻的小伙子走了过来。我…

Leetcode:701. 二叉搜索树中的插入操作(C++)

目录 问题描述: 实现代码与解析: 递归: 原理思路: 迭代: 原理思路: 问题描述: 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二…

Codeforces Round #843 (Div. 2)——A,B,C,E

​​​​​​​​​​​Dashboard - Codeforces Round #842 (Div. 2) - Codeforces A: 思维构造 题意:给定一个由 ab 组成的字符串,将该字符串拆分成 3 个部分(a,b,c),要求中间部分的字典序最大…

2022 年终总结

在 12 月 31 号晚上这天,打开朋友圈大家都在告别 2022、迎接 2023,我却想不到任何值得发的内容。没有外出体会元旦的节日氛围,也没有观看任何跨年活动,2022 年最后一秒跟全年的 3153.6 万秒没有任何区别。 甚至这篇总结都差点没有…

RK3568源码编译与交叉编译环境搭建

本篇进行飞凌OK3568-C开发板的Linux系统开发需要用的软件交叉编译环境的配置。 对于软件开发,如果只是使用C/C代码,则在自己的Ubuntu虚拟机中添加RK3568对应的交叉编译器(gcc/g)即可,如果要进行Qt开发,则还要再交叉编译与RK3568配…

UDS诊断系列介绍09-1485服务

本文框架1. 系列介绍1.1 14服务概述1.2 85服务概述2. 14服务请求与应答2.1 14服务请求2.2 14服务正响应3. 85服务请求与应答3.1 85服务请求3.2 85服务正响应3.3 否定应答4. Autosar系列文章快速链接1. 系列介绍 UDS(Unified Diagnostic Services)协议&a…

graalvm+spring-cloud-gateway打造又快又小的类nginx本地网关

前言 网关是微服务架构的入口,外网请求通过网关转发到独立的微服务。项目一般会经过多个环境的测试,最终发布到生产。一个http请求,如:http://public_host/api/v1/some_service/some_path?ab&cd会先经过公网域名&#xff0c…

ThinkPHP5.x未开启强制路由(s参数)RCE

官方公告:https://blog.thinkphp.cn/869075 由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本 ThinkPHP5基础 环境搭建 官网直接下载完整包 https://www.thinkphp.cn/down/870.…

ElasticSearch集群架构及底层原理

前言ElasticSearch考虑到大数据量的情况,集群有很多的部署模式,本篇不会具体进行演示了,只是说明一下有哪些架构可以选,及一些原理的简单介绍,如果要看具体操作的那么可以自行进行搜索,这不是本篇博客要介绍…

OCR文字识别软件哪个好?7大文字识别软件

由于从各种文档中提取文本的需求非常普遍,许多办公软件或公司都提供了OCR工具。在本文中,我们为您推出了一系列功能强大且易于使用的最佳 OCR 软件。 什么是 OCR 软件? OCR 软件是一种程序或工具,可以使用光学字符识别技术识别数…

小红书数据分析网站:揭晓普通博主1个月涨粉百万的密码!

导语: 随着2023年的来临,回首小红书动态,行业热度依旧高涨,越来越多的达人涌入小红书。在时尚领域,更是出现了如氧化菊这样的大势变装博主!短短一周涨粉13W的变装博主为何能突围,强势吸睛呢&am…

[LCTF]bestphp2022安洵杯 babyphp

目录 <1> [LCTF]bestphp‘s revenge SoapClient触发反序列化导致ssrf serialize_hander处理session方式不同导致session注入 crlf漏洞 <2> 安洵杯 babyphp SoapClient 触发ssrf session反序列化 利用文件操作原生类读取flag <3> XCTF Final Web1 解…

Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析

Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析 在学习Spring Cloud 时&#xff0c;遇到了授权服务oauth 相关内容时&#xff0c;总是一知半解&#xff0c;因此决定先把Spring Security 、Spring Security Oauth2 等权限、认证相关的内容、原理及设计学习…

[极客大挑战 2019]Secret File

目录 信息收集 解题思路 信息收集 先看源码&#xff0c;发现一个php文件 <a id"master" href"./Archive_room.php" style"background-color:#000000;height:70px;width:200px;color:black;left:44%;cursor:default;">Oh! You found me&…

9.2 容器库概览

文章目录所有容器的共性&#xff1a;迭代器迭代器的范围容器类型成员begin和end成员容器的定义和初始化与顺序容器大小相关的构造函数赋值和swapassignedswap容器大小操作关系运算符所有容器的共性&#xff1a; 表格一&#xff1a; 类型别名说明iterator迭代器const_iterator…

用R语言理解全微分

文章目录6 全微分梯度的概念全微分前情提要 R语言微积分极限π,e,γ\pi, e, \gammaπ,e,γ洛必达法则连续性和导数数值导数差商与牛顿插值方向导数 6 全微分 梯度的概念 对于任意函数f(x0,x1,⋯,xn)f(x_0,x_1,\cdots,x_n)f(x0​,x1​,⋯,xn​)&#xff0c;其梯度为 ∇f(∂f∂…

解决从BIOS选择从U盘启动但是系统仍然从硬盘启动的问题

我怀疑是BIOS失去了记忆能力&#xff0c;不能记住我的选择&#xff0c;所以仍然按默认从硬盘启动。 解决&#xff1a;重置BIOS即可 下面用物理方法重置BIOS。 在主板上找到这三根针&#xff0c;将上面的黑色套子拔出&#xff0c;然后插入旁边的另外两根针&#xff0c;例如开始…

基于python知识图谱医疗领域问答系统实现

直接上结果展示: “让人类永远保持理智,确实是一种奢求” ,机器人莫斯,《流浪地球》 项目概况 本项目为一个使用深度学习方法解析问题,知识图谱存储、查询知识点,基于医疗垂直领域的对话系统的后台程序 运行效果:

aws beanstalk 结合packer创建自定义平台

参考资料 https://github.com/aws-samples/eb-custom-platforms-samples#updating-packer-templateElastic Beanstalk 自定义平台 今天使用eb平台创建环境的时候&#xff0c;发现有名为packer的选项&#xff0c;查询文档发现aws beanstalk支持自定义平台&#xff0c;这功能几…