Nacos(七)之Spring Cloud集成
转载自 Nacos Spring Cloud 快速开始
本文主要面向 Spring Cloud 的使用者,通过两个示例来介绍如何使用 Nacos 来实现分布式环境下的配置管理和服务注册发现。
关于 Nacos Spring Cloud 的详细文档请参看:Nacos Config 和 Nacos Discovery。
- 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
- 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。
前提条件
您需要先下载 Nacos 并启动 Nacos server。操作步骤参见 Nacos 快速入门
启动配置管理
启动了 Nacos server 后,您就可以参考以下示例代码,为您的 Spring Cloud 应用启动 Nacos 配置管理服务了。完整示例代码请参考:nacos-spring-cloud-config-example
- 添加依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>${latest.version}</version>
</dependency>
注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
更多版本对应关系参考:版本说明 Wiki
- 在
bootstrap.properties
中配置 Nacos server 的地址和应用名
spring.cloud.nacos.config.server-addr=127.0.0.1:8848spring.application.name=example
说明:之所以需要配置 spring.application.name
,是因为它是构成 Nacos 配置管理 dataId
字段的一部分。
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profiles.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
- 通过 Spring Cloud 原生注解
@RefreshScope
实现配置自动更新:
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {@Value("${useLocalCache:false}")private boolean useLocalCache;@RequestMapping("/get")public boolean get() {return useLocalCache;}
}
- 首先通过调用 Nacos Open API 向 Nacos Server 发布配置:dataId 为
example.properties
,内容为useLocalCache=true
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=true"
运行
NacosConfigApplication
,调用curl http://localhost:8080/config/get
,返回内容是true
。再次调用 Nacos Open API 向 Nacos server 发布配置:dataId 为
example.properties
,内容为useLocalCache=false
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=false"
- 再次访问
http://localhost:8080/config/get
,此时返回内容为false
,说明程序中的useLocalCache
值已经被动态更新了。
启动服务发现
本节通过实现一个简单的 echo service
演示如何在您的 Spring Cloud 项目中启用 Nacos 的服务发现功能,如下图示:
完整示例代码请参考:nacos-spring-cloud-discovery-example
- 添加依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>${latest.version}</version>
</dependency>
注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
更多版本对应关系参考:版本说明 Wiki
- 配置服务提供者,从而服务提供者可以通过 Nacos 的服务注册发现功能将其服务注册到 Nacos server 上。
i. 在 application.properties
中配置 Nacos server 的地址:
server.port=8070
spring.application.name=service-providerspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
ii. 通过 Spring Cloud 原生注解 @EnableDiscoveryClient
开启服务注册发现功能:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {public static void main(String[] args) {SpringApplication.run(NacosProviderApplication.class, args);}@RestControllerclass EchoController {@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)public String echo(@PathVariable String string) {return "Hello Nacos Discovery " + string;}}
}
- 配置服务消费者,从而服务消费者可以通过 Nacos 的服务注册发现功能从 Nacos server 上获取到它要调用的服务。
i. 在 application.properties
中配置 Nacos server 的地址:
server.port=8080
spring.application.name=service-consumerspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
ii. 通过 Spring Cloud 原生注解 @EnableDiscoveryClient
开启服务注册发现功能。给 RestTemplate 实例添加 @LoadBalanced
注解,开启 @LoadBalanced
与 Ribbon 的集成:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {@LoadBalanced@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(NacosConsumerApplication.class, args);}@RestControllerpublic class TestController {private final RestTemplate restTemplate;@Autowiredpublic TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)public String echo(@PathVariable String str) {return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);}}
}
- 启动
ProviderApplication
和ConsumerApplication
,调用http://localhost:8080/echo/2018
,返回内容为Hello Nacos Discovery 2018
。
相关项目
- Nacos
- Nacos Spring
- Nacos Spring Boot
- Spring Cloud Alibaba
Nacos(七)之Spring Cloud集成相关推荐
- spring cloud微服务分布式云架构 - Spring Cloud集成项目简介
Spring Cloud集成项目有很多,下面我们列举一下和Spring Cloud相关的优秀项目,我们的企业架构中用到了很多的优秀项目,说白了,也是站在巨人的肩膀上去整合的.在学习Spring Clo ...
- 关于SpringCloud微服务云架构构建B2B2C电子商务平台之- Spring Cloud集成项目简介(三)...
2019独角兽企业重金招聘Python工程师标准>>> Spring Cloud集成项目有很多,下面我们列举一下和Spring Cloud相关的优秀项目,我们的企业架构中用到了很多的 ...
- spring cloud 集成 seata 分布式事务
spring cloud 集成 seata 分布式事务 基于 seata-server 1.6.x 序言 下载 seata-server 准备一个数据库 seata 专门为 seata-server ...
- spring cloud集成Eureka
spring cloud整合Eureka 文章目录 spring cloud整合Eureka Server模块的搭建 pom.xml配置 启动类配置 application.yam配置 查看Eurek ...
- spring cloud 集成consul
spring cloud 集成consul pom.xml配置 <dependency><groupId>org.springframework.cloud</group ...
- (三)java版spring cloud+spring boot 社交电子商务平台 - Spring Cloud集成项目简介
2019独角兽企业重金招聘Python工程师标准>>> 电子商务平台源码请加企鹅求求:一零三八七七四六二六.Spring Cloud集成项目有很多,下面我们列举一下和Spring C ...
- spring cloud 集成sentinel 报错 Failed to introspect Class
今天在 spring cloud 集成sentinel 的时候 发现报错 Failed to introspect Class [org.springframework.boot.autoconfi ...
- spring cloud微服务分布式云架构 - Spring Cloud集成项目简介(三)
点击上面 免费订阅本账号! 本文作者:it菲菲 原文:https://yq.aliyun.com/articles/672242 点击阅读全文前往 Spring Cloud集成项目有很多,下面我们列举 ...
- spring cloud集成nacos注册中心、配置中心、服务远程调用
简介 Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos 帮助您更敏捷和容易地构建.交付和 ...
最新文章
- [kuangbin带你飞]专题六-生成最小树
- PID入门的十五个基本概念
- dapper使用时性能优化
- GlusterFS安装配置
- 边缘化搭建 DotNet Core 2.1 自动化发布和部署(下)
- python爬虫 asyncio aiohttp aiofiles 单线程多任务异步协程爬取图片
- LFDMM源码剖析(融入词向量的概率图模型)
- suse 安装php5.4_SUSE LINUX 安装Apache2 + PHP5 (普通安装,不是yum)
- tomcat给android发图片,一步一步学会http获取tomcat服务端的图片,在android客户端显示...
- Android Broadcast 和 BroadcastReceiver的权限限制
- Linux 配置本地yum源步骤
- php用户评论系统,php实现文章评论系统
- 纯干货内容:关于ivx和mendix的对比 还在犹豫选择那个低代码平台的小伙伴看过来
- C6678/C6657+ZYNQ/K7/A7 FPGA+AD+北斗的软硬件设计方案
- 2022年汽车修理工(中级)上岗证题库及答案
- 闪付卡(QuickPass)隐私泄露原理(重要文章)
- java 快递项目_基于SpringBoot开发的Java快递代拿系统
- 字节跳动岗位薪酬体系曝光,看完感叹:不服不行,想高薪还得是学这个。。。。
- 供水为民振兴乡村 国稻种芯-慈利县:抗旱保收盛德村在行动
- java获取经纬度和地址等工具类
热门文章
- 7-1 字母统计图 (10 分)(思路+详解)
- C++ 学习之旅(4)——调试Debug
- 浅谈Web前端安全策略xss和csrf,及又该如何预防?
- Java内置数据类型
- C++ 实现无向图的最小生成树Kruskal算法(完整代码)
- 用空代理实现account(lua程序设计21.7练习21.4题)
- java基础知识——面向对象基本概念
- c语言加花指令,花指令的应用
- mysql 2008 日_SQL2008 的 日期数据类型
- 数据结构与算法--将数组排成最小的数