基于Spring Cloud集成Nacos应用微服务注册与配置
创始人
2025-06-01 12:42:29
0

记录:386

场景:在nacos中集中管理微服务配置,微服务在启动时,连接nacos读取配置到本地使用。在nacos中集中管理微服务注册,微服务在启动时,连接nacos并注册到其服务管理中。在微服务配置文件中只需写nacos配置和注册等少量配置。

官网:https://nacos.io/zh-cn/

源码:https://github.com/alibaba/Nacos

1.初始化准备

1.1准备nacos

Nacos版本:Nacos 2.1.1。

1.1.1启动和登录nacos

启动命令:sh startup.sh -m standalone

地址:http://127.0.0.1:8848/nacos

用户名/口令:nacos/nacos

1.1.2创建命名空间

命名空间ID:aa3eebb6-daa2-4db8-9a29-03dd8a17db15

命名空间名:hub

1.1.3创建配置

选中hub命名空间,创建配置。

(1)hub-example01-config.yml配置

Data ID:hub-example01-config.yml

Group:DEFAULT_GROUP

配置格式:YAML

配置内容:

pring:main:allow-bean-definition-overriding: true
server:max-http-header-size: 51200

(2)hub-example02-config.yml配置

Data ID:hub-example02-config.yml

Group:DEFAULT_GROUP

配置格式:YAML

配置内容:

hub:example:cityName: '杭州'

1.2创建Maven工程

使用IntelliJ IDEA创建Maven工程。

(1)微服务名称

名称:hub-example-301-nacos

(2)微服务groupId和artifactId

groupId: com.hub

artifactId: hub-example-301-nacos

(3)微服务核心模块版本

spring-boot 2.6.3
spring-cloud 2021.0.1
spring-cloud-alibaba 2021.0.1.0
spring-framework 5.3.15

2.修改pom.xml

修改pom.xml,引入项目依赖Jar和管理Jar包。

2.1修改pom.xml文件

引入核心依赖包:

内容:


com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery2021.0.1.0org.springframework.cloudspring-cloud-starter-netflix-ribbon


com.alibaba.cloudspring-cloud-starter-alibaba-nacos-config2021.0.1.0com.alibaba.nacosnacos-client

2.2全量pom.xml文件

全量pom.xml文件请参考附录:1.8.1全量pom.xml文件

3.创建bootstrap.yml文件

在bootstrap.yml文件中配置nacos的配置和注册信息以及微服务端口等基础信息,其它配置均从nacos中读取。

3.1配置bootstrap.yml

文件名:../src/main/resources/bootstrap.yml

文件内容:

server:port: 18301servlet:context-path: /hub-301-nacos
spring:application:name: hub-example-301-nacoscloud:nacos:discovery:server-addr: 127.0.0.1:18848username: nacospassword: nacosnamespace: aa3eebb6-daa2-4db8-9a29-03dd8a17db15
group: DEFAULT_GROUPconfig:server-addr: 127.0.0.1:18848username: nacospassword: nacosnamespace: aa3eebb6-daa2-4db8-9a29-03dd8a17db15group: DEFAULT_GROUPfile-extension: yamlshared-configs:- dataId: hub-example01-config.ymlgroup: DEFAULT_GROUPrefresh: true- dataId: hub-example02-config.ymlgroup: DEFAULT_GROUPrefresh: true

3.2解析bootstrap.yml

(1)配置端口号和context-path,此项可选,不指定就会默认。

(2)配置微应用名称:hub-example-301-nacos,此项必须配置,因为注册微服务需用到微服务名称。

(3)nacos的注册在spring.cloud.nacos.discovery下的属性。

spring.cloud.nacos.discovery.server-addr,指定nacos地址。

spring.cloud.nacos.discovery.username,指定nacos名称。

spring.cloud.nacos.discovery.password,指定nacos密码。

spring.cloud.nacos.discovery.namespace,指定命名空间。

spring.cloud.nacos.discovery.group,指定group名称。

(4)nacos的配置在spring.cloud.nacos.discovery下的属性。

spring.cloud.nacos.config.server-addr,指定nacos地址。

spring.cloud.nacos.config.username,指定nacos名称。

spring.cloud.nacos.config.password,指定nacos密码。

spring.cloud.nacos.config.namespace,指定命名空间。

spring.cloud.nacos.config.group,指定group名称。

spring.cloud.nacos.config.file-extension,指定从nacos读取配置文件后缀。

spring.cloud.nacos.config.shared-configs,指定从nacos读取配置文件。

注意:spring.cloud.nacos.config.shared-configs属性是一个List属性,换句话说,就是可以读取多个配置文件。

在Java代码中类型:List sharedConfigs。

在bootstrap.yml配置文件中,以短横线-,开头代表是List类型。

(5)解析spring.cloud.nacos.config.shared-configs

nacos的spring.cloud.nacos.config.shared-configs是List属性。

例如:

- dataId: hub-example01-config.ymlgroup: DEFAULT_GROUPrefresh: true

解析:-,代表是List类型。dataId,指定nacos中的文件名。group,指定文件所在组。refresh,指定是否刷新,true,刷新,false,不刷新,换句话说,就是微服务能实时刷新nacos中的配置,达到同步效果。

4.创建启动类

4.1创建包

com.hub.example.domain:微服务使用到的DTO等实体类。

com.hub.example.controller:Controller类,发布Restful接口。

4.2启动类

包名:com.hub.example。

启动类:HubExampleNacosApplication。

(1)内容

@SpringBootApplication
@ComponentScan(basePackages = "com.hub.example.*")
public class HubExampleNacosApplication {public static void main(String[] args) {SpringApplication.run(HubExampleNacosApplication.class, args);}
}

(2)解析

@SpringBootApplication,SpringBoot标记启动类的注解。

@ComponentScan,扫描指定的包,将组件加载到IOC容器中。

5.编写Controller代码

5.1Controller代码

@RestController
@RequestMapping("/hub/example/city")
@RefreshScope
public class CityController {@Value("${hub.example.cityName}")private String cityName;@PostMapping("/queryCityByCityId")public ResultObj queryCityByCityId(String cityId) {CityDTO cityDTO = new CityDTO();cityDTO.setCityId(cityId != null ? Long.parseLong(cityId) : 1L);cityDTO.setCityName(cityName);cityDTO.setUpdateTime(new Date());return ResultObj.data(200, cityDTO, "执行成功");}
}

5.2解析Controller代码

@Value("${hub.example.cityName}"):从nacos的hub-example02-config.yml配置中读取配置信息。

@RefreshScope:此注解会激活@Value实时从配置文件中取值,只要对应配置有变化,达到同步效果。

6.支撑对象

6.1CityDTO

@Data
public class CityDTO implements Serializable {private Long cityId;private String cityName;private Double landArea;private Long population;private Double gross;private String cityDescribe;private String dataYear;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date updateTime;
}

6.2ResultObj

@Data
public class ResultObj implements Serializable {private int code;private boolean success;private String msg;private T data;private ResultObj(int code, T data, String msg) {this.code = code;this.data = data;
this.msg = msg;
this.success = code == 200;}public static  ResultObj data(int code, T data, String msg) {return new ResultObj<>(code, data, msg);}
}

7.使用Postman工具测试

使用Postman工具测试。

测试地址:http://127.0.0.1:18301/hub-301-nacos/hub/example/city/queryCityByCityId

测试入参:cityId=20230322

返回结果:

{"code": 200,"success": true,"msg": "执行成功","data": {"cityId": 20230322,"cityName": "杭州","landArea": null,"population": null,"gross": null,"cityDescribe": null,"dataYear": null,"updateTime": "2023-03-22 21:21:55"}
}

8.附录

8.1全量pom.xml文件


4.0.0com.hubhub-example-301-nacos1.0-SNAPSHOTorg.springframework.bootspring-boot-starter-parent2.6.3集成nacos框架应用jar1.81.8UTF-8UTF-82.6.32.6.32021.0.12021.0.1.02.1.11.18.2430.1-jreorg.springframework.bootspring-boot-starter-parent${spring.boot.version}pomimportorg.springframework.cloudspring-cloud-dependencies${spring.cloud.version}pomimportcom.alibaba.cloudspring-cloud-alibaba-dependencies${spring.cloud.alibaba.version}pomimportorg.springframework.bootspring-boot-starterorg.springframework.bootspring-boot-starter-weborg.springframework.cloudspring-cloud-starter-bootstrapcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoveryorg.springframework.cloudspring-cloud-starter-netflix-ribboncom.alibaba.cloudspring-cloud-starter-alibaba-nacos-configcom.alibaba.nacosnacos-clientcom.alibaba.nacosnacos-client${nacos.client.version}org.projectlomboklombok${lombok.version}com.google.guavaguava${guava.version}${project.artifactId}org.springframework.bootspring-boot-maven-plugin${spring.boot.maven.plugin.version}truetruerepackage

以上,感谢。

2023年3月22日

相关内容

热门资讯

韩国新总统最快4日上任,学者:... 韩国总统大选3日即将迎来正式投票。根据选前多项“封关”民调结果,共同民主党候选人李在明仍以明显优势领...
23亿镑仍被冻结!英政府声明:... 直播吧06月03日讯 英国财政大臣瑞秋-里维斯与外交大臣戴维-拉米发表联合声明,就阿布出售切尔西的2...
美国总统特朗普关税政策的法律对... 美国总统特朗普关税政策的法律对头们要求法院在特朗普政府上诉期间暂停实施关税。
芯朋微将于6月18日召开股东大... 金融界6月2日消息,芯朋微发布公告,将于2025年6月18日召开第1次临时股东大会,网络投票同日进行...
“开盒”游戏害了多少孩子?看这... 5月29日,在最高人民法院“六一”儿童节公众开放日活动上,由最高人民法院新闻局、民一庭、人民法院出版...
原创 一... 近期,伴随着中国积极推行国际调解机制的浪潮,历史冤家柬埔寨与泰国却在边境地区上演了一场短暂却引发广泛...
2025深圳最新购房政策汇总! 深圳最新的购房政策是如何的? 今日小编为大家整理 2025年深圳买房政策汇总 大家一起来看看 一、...
南昌南斯友好路两家“海湾石油”... 今天(2日)上午 多名消费者向《都市现场》反映 他们在南昌南斯友好路上的两家“海湾石油” 预付充值了...
曝拜仁与莱奥密谈!AC米兰索要... 足坛转会市场再起波澜!德甲巨无霸拜仁慕尼黑,这次将目光投向了亚平宁半岛,盯上了AC米兰的王牌边锋——...
曼联2500万甩卖“铁腰”,那... 提起苏格兰中场斯科特·麦克托米奈,如今的足坛可谓是无人不知,无人不晓。但就在2024年夏天,当曼联以...