注册发现各种第三方组件的比较介绍:
CAP C:一致性 A:可用性 P:分区容错性
启动nacos
Linux环境:找到startup.sh,编辑文件将启动模式从集群cluster模式修改为单机模式standalone,如下图
然后执行 startup.sh即可
Windows环境:startup.cmd -m standalone 启动即可
注册发现
spring:application:name: sawarth-systemcloud:nacos:discovery:server-addr: localhost:8848 # 服务注册地址namespace: b0e83780-0d9b-4bee-bc1a-9dd0e499af4f #默认为 publicusername: nacos #默认为nacospassword: nacos #默认为nacosgroup: POWER_STATION_GROUP #默认是DEFAULT-PUBLIC
# 暴露监控端点 给springboot的actuator使用,不配置也可以正常使用nacos实现服务注册
management:endpoints:web:exposure:include: '*'
注意yml配置中的namespace,这个你配置的是那个命名空间,注册的实力就会在那个命名空间中,我配置的不是pulic而是lhb_dev这个命名空间,实例就在这下面,如下图:
下面说明一下yml配置与截图中的对应关系
yml | 图片 |
spring.application.name | 服务名 |
spring.cloud.nacos.discovery.namespace | lhb_dev |
spring.cloud.nacos.discovery.group | 分组名称 |
备注:lhb_test lhb_dev lhb_pro这三个命名空间(所有的命名空间)要自己先体检在控制台建立
配置中心
配置中心三个核心概念讲解:
参考:Redirecting to: https://nacos.io/docs/v2/ecology/use-nacos-with-spring-cloud/
Step1:引入pom依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
Step2:创建bootstrap.yaml文件
spring:application:name: sawarth-systemcloud:nacos:discovery:server-addr: localhost:8848 # 服务注册地址namespace: b0e83780-0d9b-4bee-bc1a-9dd0e499af4f #默认为 publicusername: nacos #默认为nacospassword: nacos #默认为nacosgroup: POWER_STATION_GROUP #默认是DEFAULT-PUBLICconfig:# 配置中心地址server-addr: localhost:8848# 配置文件格式file-extension: yml# 共享配置shared-configs:- sufdsou-application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}namespace: b0e83780-0d9b-4bee-bc1a-9dd0e499af4fgroup: POWER_STATION_GROUP
# 暴露监控端点 给springboot的actuator使用,不配置也可以正常使用nacos实现服务注册
management:endpoints:web:exposure:include: '*'
cloud.nacos.config下的配置就是配置中心的内容。这里要注意namespace和group与注册发现的意思是一样的。
Step3:在nacos控制台的配置管理中创建配置信息。
在nacos配置中心创建好这个Data ID为sawarth-system.yml的配置后,程序启动时就会通过一定的规则自动组成一个DataID的名字,然后去nacos中来找。规则如下:
根据这个规则,我们的程序启动时就会从bootstrap.yml中根据规则自动生成对应的Data ID,如:
springboot.application.name = sawarth-system
spring.profiles.active=“”
file-extension=yml
最后就会就会得到sawarth-system.yml这个Data ID,然后去nacos中去找与之相同的的那个DataID中的配置信息。
所以我们程序中必须要正确的配置上面这几个内容,否则Data ID与Nacos中的对应不上就无法获取到对应的配置信息了
Step4:读取naocs中配置的内容
方式一:
public class SystemApplication
{public static void main(String[] args) throws InterruptedException {ConfigurableApplicationContext applicationContext = SpringApplication.run(SystemApplication.class, args);while(true) {//When configurations are refreshed dynamically, they will be updated in the Enviroment, therefore here we retrieve configurations from Environment every other second.String swaggerLicense = applicationContext.getEnvironment().getProperty("swagger.license");System.err.println("swagger license :" + swaggerLicense );TimeUnit.SECONDS.sleep(3);}}
}
方式二:通过controller获取并返回配置信息
public class UserController{@Value("${user.name}")private String userName;@GetMapping("/user")public String getUserName(){return userName;}
}
实战
项目开发中切换dev,test,pro三种不同环境的方案。
方案1:通过DataID来实现
step1:
在nacos的配置管理中分别创建order-service-dev.yml , order-service-test.yml , order-service-pro.yml三个DataID相关的配置
step2:
通过修改bootstrap.yml或者application.yml中的spring.profiles.active的值来切换,如下:
spring:profiles:active: dev#active: test#active: pro
step3:在bootstrap.yml中配置nocos
spring:application:name: order-servicecloud:nacos:discovery:server-addr: localhost:8848 # 服务注册地址username: nacos #默认为nacospassword: nacos #默认为nacosconfig:# 配置中心地址server-addr: localhost:8848# 配置文件格式file-extension: yml
根据nacos的client端的DataID自动生成规则${prefix}-${spring.profiles.active}.${file-extension}就会生成一个为order-service-dev.yml的 DataID,然后去nacos控制台中找对应的这个order-service-dev.yml的配置信息,进行使用了。
当我们把spring.profiles.active改为test,那么程序运行时,就会到nacos控制台找order-service-test.yml这个DataID对应的配置信息。从而是写基于DataID的环境切换。
方案2:通过group来实现
step1:
Nacos控制台中创建DataID对应的配置时,Data ID不变,通过修改Group来实现(因为官网说过不同的分组下是可以使用相同的DataID)
step2:修改bootstrap.yml,添加gruop键值对
spring:application:name: order-servicecloud:nacos:discovery:server-addr: localhost:8848 # 服务注册地址username: nacos #默认为nacospassword: nacos #默认为nacosconfig:# 配置中心地址server-addr: localhost:8848# 配置文件格式file-extension: ymlgruop: DEV-GROUP #如果要切换到TEST-GROUP下,修改这里即可
通过修改group的值,就可以实现环境切换了
方案3:通过namespace来实现
step1:创建3个命名空间,分别是lhb_dev,lhb_test,lhb_pro
创建好命名空间后,在[配置管理]-[配置列表]和[服务管理]-[服务列表]就会出现,如下:
然后在[配置列表]的每个命名空间下创建名为order-service.yml的DataID的配置项
step2:在bootstrap.yml中设置namespace属性
spring:application:name: order-servicecloud:nacos:discovery:server-addr: localhost:8848 # 服务注册地址username: nacos #默认为nacospassword: nacos #默认为nacosconfig:# 配置中心地址server-addr: localhost:8848# 配置文件格式file-extension: ymlnamespace: 39f1a970-68b0-46f5-b30e-3b666b125734 #这个号,在创建命名空间后会自动生成。lhb_dev,lhb_test,lhb_pro每个都对应一个,在这里修改即可
然后再bootstrap.yml中通过修改namespace就可以实现环境的切换
Nacos集群
例子中我们使用一个nginx,结构如下,端口我们将3333/4444/5555改为8847/8848/8849
要搭建集群,官方建议使用Linux并且数据持久化到MySql中
Step1:Linux下安装Nacos
到官网下载linux版本的nacos(nacos-server-2.0.3.tar.gz),放到linux的/opt目录下。
tar -zxvf nacos-server-2.0.3.tar.gz解压,解压后/opt目录就会多出解压后的文件。
Step2:修改nacos中的属性文件,设置mysql数据库
Step3:配置nacos中的集群配置文件cluster.conf
如果是三个nacos都在一个linux上,就通过端口来区分启动三个实例,注意定要写ip地址,不能写127.0.0.1或者localhost。如果是nacos分别放到3个linux机器上,端口号写一样的也没事
Step4:编辑nacos启动脚本startup.sh,设置端口号,这样能保证一个linux上启动3个nacos
添加内容如下:
Step4:测试启动nacos是否好用
./startup.sh -o 8847
./startup.sh -o 8848
./startup.sh -o 8849
启动完成后,可以通过一下命令看一下集群是否全部启动成功,数量为3
ps -ef|grep nacos|grep -v grep | wc -l
Step5:配置nginx
【3】处改成我们的8847,8848,8849 。
【2】处和【3】处配套使用,【2】处相当于进行一个反向代理,将将监听的1111端口对nginx的访问 ,通过反向代理进入到【3】处,然后最后实际调用的是【3】中的地址
Step6:启动nginx
cd /usr/local/nginx/sbin./nginx -c /usr/local/nginx/conf/nginx.conf
Step7:通过浏览器访问nginx来实现访问nacos控制台
http://nginx所在的ip地址:1111/nacos
这样nginx就会自动通过负载均衡去找nacos,打开nacos控制台了。
Step8:配置代码,让代码通过nginx访问nacos
spring:application:name: order-servicecloud:nacos:discovery:server-addr: http://nginx的ip地址:1111 # 服务注册地址username: nacos #默认为nacospassword: nacos #默认为nacosconfig:# 配置中心地址server-addr: http://nginx的ip地址:1111# 配置文件格式file-extension: yml
就是将原先nacos的地址,改为nginx的地址就行,然后通过nginx反向代理到nacos中了。