当前位置: 首页 > 科技观察

6000字|20张图片|Nacos手感教程

时间:2023-03-11 22:03:40 科技观察

大家好,我是悟空。上次我们讲解了OpenFeign的架构原理。这次我们要进入Nacos帝国。Nacos作为服务注册中心和配置中心,已经非常成熟,是业界的标杆。在讲解Nacos的架构原理之前,先给大家来个开胃菜:讲解如何使用Nacos。涉及以下两个主题:使用Nacos作为注册中心。使用Nacos作为配置中心。由于这篇文章针对的是Nacos的使用和配置,所以可能有点枯燥。建议大家快点浏览,收藏转发。以后可能会用到~~本文主要内容如下:老规矩,本文所有示例代码均以我开源的SpringCloud项目PassJava为例。开源地址:https://github.com/Jackson0714/PassJava-PlatformPassJava架构图如下:Nacos是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台,让构建云原生更简单应用程序。1.Nacos作为注册中心1.1引入Nacos服务发现组件passjava-common模块的pom.xml文件导入Nacos服务发现组件com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery1.2下载NacosServer工具包并启动注意:我在Windows和Mac上都测试过,两者都可以正常使用。下载NacosServer压缩包https://github.com/alibaba/nacos/releases启动Server,进入解压后的文件夹或者编译打包后的文件夹,找到相对文件夹nacos/bin如下,对比实际操作下系统情况,命令如下。Linux/Unix/Mac操作系统,执行命令shstartup.sh-mstandaloneWindows操作系统,执行命令cmdstartup.cmdwindowsexecutestartupm.cmd遇到问题:λstartup.cmdPleasesettheJAVA_HOMEvariableinyourenvironment,We需要java(x64)!jdk8或更高版本更好!解决方法:修改startup.cmd文件中的%JAVA_HOME%%JAVA_HOME%,替换为C:\ProgramFiles\Java\jdk1.8.0_131启动成功:1.3各微服务配置NacosServer地址配置NacosServer地址配置NacosServerpassjava-question、passjava-channel、passjava-content、passjava-member、passjava-study应用的/src/main/resources/application.yml配置文件中的地址spring:cloud:nacos:discovery:server-addr:127.0.0.1:88481.4为每个服务添加注解使用@EnableDiscoveryClient注解启用服务注册和发现@EnableDiscoveryClient@MapperScan("com.jackson0714.passjava.question.dao")@SpringBootApplicationpublicclassPassjavaQuestionApplication{publicstaticvoidmain(String[]args){SpringApplication.run(PassjavaQuestionApplication.class,args);}}1.5配置微服务sp的名称ring:application:name:passjava-question1.6访问nacosserver后台登录后台http://localhost:8848/nacos/index.html#/login用户名:nacos密码:nacos查看注册服务passjava-channelchannelmicroservicepassjava-member用户微服务passjava-study学习微服务passjava-question问题微服务passjava-content内容微服务2.Nacos作为配置中心2.1传统配置方式application.properties文件中定义了两个配置:member.nickname="WukongChatArchitecture"member.age="18"在示例控制器中定义私有变量nickname和age,@value表示从配置中取值@Value("${member.nickname}")privateStringnickname;@Value("$member.age")私有整数年龄;示例控制器中定义的方法:获取nick和age的值@RequestMapping("/test-local-config")publicRtestLocalConfig(){returnR.ok().put("nickname",nickname)。put("age",age);}测试结果标记总结:从配置文件获取配置有什么缺点?如果要修改配置参数,需要重新启动服务。如果服务很多,需要重启所有服务,很不方便。有没有什么办法可以不断修改配置并使其生效?答:可以,用SpringCloudAlibaba的Nacos组件就可以完成。2.2导入Nacos依赖PassJava-Common项目的pom.xml文件导入SpringCloudAlibabaNacosConfig依赖com.alibaba.cloudspring-cloud-starter-alibaba-nacos-config2.3配置Nacos元数据passjava-member添加/src/main/resources/bootstrap.properties配置文件(注:bootstrap.properties优先级高于其他配置文件)配置NacosConfig元数据bootstrap.propertiesspring.application.name=passjava-memberspring.cloud.nacos.config.server-addr=127.0.0.1:88482.4Nacos后台新建配置数据ID:passjava-member.propertiesGroup:DEFAULT_GROUP配置格式:member.nick="Wukong"member.age=10Nacos后台新建配置2.5开启动态刷新配置功能添加注解@RefreshScope开启动态刷新配置功能@RefreshScope@RestController@RequestMapping("member/sample")publicclassSampleController{}从控制台可以看到日志信息:Refreshkeyschanged:[member.age]2020-04-1923:34:07.154INFO8796---[-127.0.0.1_8848]c.a.nacos.client.config.impl.CacheData:[fixed-127.0.0.1_8848][notify-ok]dataId=passjava-member.properties,group=DEFAULT_GROUP,md5=df136e146c83cbf857567e75acb11e2b,listener=com.alibaba.cloud.nacos.refresh.NacosContextRefresher$1@4f49b78b2020-04-1923:34:07.154INFO8796---[-1217.0.0.0.8.0.0.154]client。.config.impl.CacheData:[fixed-127.0.0.1_8848][notify-listener]时间成本=529msinClientWorker,dataId=passjava-member.properties,group=DEFAULT_GROUP,md5=df136e146c83cbf857567e75acb11e2bcom.alibababa.nacos.refreshConfresh$1@4f49b78bmember.age更新,通知会员服务,刷新配置对应的配置id为passjava-member.properties,group为DEFAULT_GROUP。Listener为com.alibaba.cloud.nacos.refresh.NacosContextRefresher2.6测试结果访问:http://localhost:10000/member/sample/test-local-config结果:昵称和年龄与Nacos后台配置一致结论:仅通过在Nacos后台更改配置,可以实时修改配置。注意:Nacos的配置项优先级高于application.propertite中的配置项。测试结果2.7Namespace我们现在有5个微服务,每个微服务使用的配置可能不一样,那么不同的微服务如何获取自己微服务的配置呢?这里可以使用命名空间,我们针对每个微服务创建一个命名空间。CreateNamespaceCreateNamespace#创建5个命名空间passjava-channelpassjava-contentpassjava-memberpassjava-questionpassjava-studynamespace在命名空间下创建配置我们打开配置列表菜单可以看到有5个命名空间。在命名空间下创建配置。选择passjava-channel命名空间,然后添加配置项,与前面添加配置的步骤相同。您还可以通过克隆命名空间来克隆配置。克隆配置修改指定命名空间bootstrap.properties配置命名空间spring.cloud.nacos.config.namespace=passjava-member测试配置是否生效修改passjava-member.properties的配置内容passjava-member.properties重启成员服务访问method:/member/sample/test-local-config执行结果:{"msg":"success","code":0,"nickname":"\"Wukongmember\"","age":30}description得到的是passjava-member命名空间的配置2.8分组如果我们有多个环境,比如开发环境,测试环境,生产环境,每个环境的配置参数都不一样,那配置中心应该怎么配置呢?我们可以使用配置中心的分组功能。每组环境都是一组分组。首先创建一组dev环境配置项,然后clone配置到test和prod环境dev环境dev,test,prod组bootstrap.properties配置当前使用组:prodspring.cloud.nacos.config.group=prodtest为获取生产环境配置{"msg":"success","code":0,"nickname":"\"Wukong-prod\"","age":10}可以看到获取到的配置就是配置prod组的2.9多配置集我们可以将application.yml文件中的datasource、mybatis-plus等配置拆解,放到配置中心。Group可以创建3组,dev/test/prod。2.9.1在配置中心新建datasource.yml配置配置datasource.yml配置2.9.2在配置中心新建mybatis.yml配置配置mybatis.yml配置2.9.3在配置中心新建more.yml配置配置中心配置more.yml配置2.9.4Clonedev环境配置添加nacos配置到test和prod环境mark2.9.5bootstrap.properties,application.yml注释配置spring.application.name=passjava-memberspring.cloud.nacos.config。server-addr=127.0.0.1:8848spring.cloud.nacos.config.namespace=passjava-memberspring.cloud.nacos.config.group=prodspring.cloud.nacos.config.extension-configs[0].data-id=数据源.ymlspring.cloud.nacos.config.extension-configs[0].group=devspring.cloud.nacos.config.extension-configs[0].refresh=truespring.cloud.nacos.config.extension-configs[1]。data-id=mybatis.ymlspring.cloud.nacos.config.extension-configs[1].group=devspring.cloud.nacos.config.extension-configs[1].refresh=truespring.cloud.nacos.config.extension-configs[2].data-id=more.ymlspring.cloud。nacos.config.extension-configs[2].group=devspring.cloud.nacos.config.extension-configs[2].refresh=true2.9.6测试配置是否生效测试passjava-member.properties和more.yml配置是否有效请求url:http://localhost:10000/member/sample/test-local-config返回配置的nick和age,端口为10000,会员服务注册到注册中心{"msg":"success","code":0,"nickname":"\"Wukong-prod1\"","age":22}测试datasource.yml和mybatis.yml配置是否正确有效请求url:http://localhost:10000/member/member/list返回数据库查询结果{"msg":"success","code":0,"page":{"totalCount":0,"pageSize":10,"totalPage":0,"currPage":1,"list":[]j}}表示以上配置已经生效更多配置项2.9.10使用Nacos小结导入Nacos依赖配置Nacos数据源配置中心配置数据集DataId和配置内容启用动态刷新配置@RefreshScope获取配置项的值@value优先配置configurationcenter使用命名空间namespace来创建每个服务的配置使用组group区分不同的环境使用多配置集合extension-configs区分不同类型的配置后记Nacos底层原理正在更新中,希望大家新年快乐,但不要太累赘~