当前位置:   article > 正文

spring cloud nacos 简单配置_nacos contextpath修改

nacos contextpath修改

 Nacos 是阿里巴巴推出来的开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平 台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发 现、服务配置、服务元数据及流量管理。

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

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

SpingCloud 与 Nacos 版本说明参考: https://github.com/aliba ba/spring-cloud-alibaba/wiki/版本说明

Nacos 与 Spring Cloud 对比

相对于 Spring Cloud Eureka 来说,Nacos 更强大。Eureka 已经闭源,但是还有企业在用。 Nacos = Spring Cloud Eureka + Spring Cloud Config

Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。

通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。

通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。

1、下载nacos并开启注册中心

从 github 下载稳定版: https://github.com/alibaba/nacos/releases
(1)、在nacos下面的config目录下面配置数据源

修改config下面application.properties的文件

开启数据源mysql,创建nacos数据库并导入config下面的nacos-mysql.sql中的数据 

 

 (2)、window下启动注册中心

在nacos下面的bin目录下面

启动命令(standalone代表着单机模式运行,非集群模式):

startup.cmd -m standalone

启动的状态如下所示

二、项目的微服务注册到nacos

(1)模块客户端采用

  1. <!-- nacos 客户端 -->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  5. </dependency>

父工程的客户端注入spring-cloud-alibaba的依赖

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  4. <version>2.2.1.RELEASE</version>
  5. <type>pom</type>
  6. <scope>import</scope>
  7. </dependency>

(2)application.yml中配置注册中心地址

  1. spring: # 注意追加在配置文件中已经有 spring 前缀的后面
  2. cloud:
  3. nacos:
  4. discovery:
  5. server-addr: localhost:8848 # 服务注册中心地址

注册名article-server

  1. spring:
  2. application:
  3. name: article-server # 应用名

3、在启动类加入@EnableDiscoveryClient注解,开启服务的注册与发现

  1. @EnableDiscoveryClient
  2. @SpringBootApplication
  3. @EnableSwagger2Doc
  4. public class ArticleApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(ArticleApplication.class, args);
  7. }
  8. }

打开nacos就能看到注册服务 

 三、统一配置管理

集中管理配置文件 不同环境不同配置,

动态化的配置更新,

根据不同环境部署,如 dev/test/prod 运行期间动态调整配置,

不再需要在每个服务部署的机器上编写配置,服务会向配置中心统一拉取自已 的配置信息

当配置发生变动时,服务不需要重启即可感知到配置的变化并使用修改后的配置信息

将配置信息以REST接口的形式暴露

1、创建配置信息

由、 ${prefix}-${spring.profiles.active}.${file-extension}

prefix:注册服务的名称,article-server 

  1. spring:
  2. application:
  3. name: article-server # 应用名

spring.profiles.active :环境名称,开发环境-dev 生产环境-prod,这个可以不用配置

file-extension :配置的文件类型

简单的配置如下 

 

2、微服务配置添加依赖

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  4. </dependency>

3、创建bootstrap.yml文件

Nacos 与 spring cloud config 一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后, 才能保证项目的正常启动。springboot 中配置文件的加载是存在优先级顺序的,bootstrap 优先级高于 application

文件配置内容如下

  1. spring:
  2. application:
  3. name: question-server # 当前服务的应用名
  4. cloud:
  5. nacos:
  6. discovery:
  7. server-addr: 127.0.0.1:8848 # 注册中心地址
  8. config:
  9. server-addr: 127.0.0.1:8848 # 配置中心地址
  10. file-extension: yml # 配置中心的配置格式
  11. profiles:
  12. active: dev #开启环境为dev的,在nacos的配置中心寻找,article—server-dev.yml

4、读取nacos上面的配置信息

通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新

  1. @RefreshScope
  2. @RestController
  3. public class TestConfig {
  4. @Value("${user.name}")
  5. private String name;
  6. @Value("${user.age}")
  7. private String age;
  8. @GetMapping("/config")
  9. public String testConfig() {
  10. String config = "name:" + name + "age:" + age;
  11. return config;
  12. }
  13. }

5、访问接口拿取到数据如下

通过nacos配置中心,运用feign微服务之间接口调用

1、统一的一个api C服务,方便接口调用,在api C中加入  feign 调用服务接口依赖

  1. <!-- feign 调用服务接口 -->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-openfeign</artifactId>
  5. </dependency>

2、A微服务和B微服务通引入api C的依赖,统一在api C服务中调取

在api 中创建接口,B微服务实现这个接口,A微服务调用这个接口

FeignClient:开启feign服务

value = "article-server": value指定 指定是哪个微服务接口

path = "article"    path 是在 Feign 调用时会加上此前缀,它与接口实现类的微服务中配置的 context-path 值一致,如果微服务中 没有配置 context-path 下面就不需要写 path

  1. @FeignClient(value = "article-server", path = "article")
  2. public interface IFeignArticleController {
  3. // allowMultiple=true 表示数组格式的参数,dataType="String" 表示数组中参数的类型
  4. @ApiImplicitParam(
  5. allowMultiple=true,dataType="String",
  6. name = "ids",value = "label的id集合",required = true)
  7. @ApiOperation("通过id的集合,来循环查询label数据")
  8. @GetMapping("/api/feign/label/list/{ids}")
  9. List<Label> findLabelByLabelIds(@PathVariable("ids") List<String> ids);
  10. }

3、B微服务实现接口

  1. @RestController // 加上控制层注解
  2. public class FeignArticleController implements IFeignArticleController {
  3. @Autowired
  4. ILabelService iLabelService;
  5. @Override
  6. public List<Label> findLabelByLabelIds(List<String> ids) {
  7. List<Label> labels = iLabelService.listByIds(ids);
  8. return labels;
  9. }
  10. }

4、A微服务调用B实现的接口,拿到接口返回的数据

  1. @Autowired
  2. IFeignArticleController iFeignArticleController;
  3. @Override
  4. public Result findByQuestionId(String id) {
  5. Question question = baseMapper.findQuestionAddLabelsById(id);
  6. if (question == null) {
  7. return Result.error("没有问题详情信息");
  8. }
  9. /**
  10. * 通过Feign远程调用 article表中内容
  11. */
  12. // TODO 判断labelId的集合是否等于空
  13. if (CollectionUtils.isNotEmpty(question.getLabelIds())) {
  14. List<Label> labelByLabelIds = iFeignArticleController.findLabelByLabelIds(question.getLabelIds());
  15. question.setLabelList(labelByLabelIds);
  16. }
  17. return Result.ok(question);
  18. }

5、A微服务中,在application中加入 @EnableFeignClients注解,扫描 @Feign 接口

  1. @EnableFeignClients
  2. @EnableDiscoveryClient
  3. @EnableSwagger2Doc //开启swagger功能
  4. @SpringBootApplication
  5. public class QuestionApplication {
  6. public static void main(String[] args) {
  7. SpringApplication.run(QuestionApplication.class, args);
  8. }
  9. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/182378
推荐阅读
相关标签
  

闽ICP备14008679号