小言_互联网的博客

SpringBoot或SpringCloud集成Nacos

363人阅读  评论(0)

一、创建一个项目

首先创建一个空项目,然后引入Nacos的依赖,并选择正确的SpringBoot和Nacos版本,如果版本选择不对的话可能会启动失败,带来很大的问题


   
  1.     <!--SpringBoot的版本-->
  2.     <parent>
  3. <groupId>org.springframework.boot </groupId>
  4. <artifactId>spring-boot-starter-parent </artifactId>
  5. <version>2.4.2 </version>
  6. <relativePath/> <!-- lookup parent from repository -->
  7. </parent>
  8. <!--Nacos配置中心-->
  9. <dependency>
  10. <groupId>com.alibaba.cloud </groupId>
  11. <artifactId>spring-cloud-starter-alibaba-nacos-config </artifactId>
  12. <version>2021.1 </version>
  13. </dependency>
  14. <!--Nacos 注册中心-->
  15. <dependency>
  16. <groupId>com.alibaba.cloud </groupId>
  17. <artifactId>spring-cloud-starter-alibaba-nacos-discovery </artifactId>
  18. <version>2021.1 </version>
  19. </dependency>
  20. <dependency>
  21. <groupId>org.springframework.boot </groupId>
  22. <artifactId>spring-boot-starter-web </artifactId>
  23. </dependency>

在整合Nacos过程中需要根据 SpringBoot 版本来选择 注册中心配置中心的依赖版本,在这里我选择的是如下的这个版本。

如果需要选择其他版本请看版本说明-->版本说明

二、使用注册中心

1、首先增加注册中心的依赖配置,在application.yml配置文件中加入以下配置


   
  1. server:
  2. port: 8089
  3. spring:
  4. application:
  5.         #需要标识应用的名称
  6. name: nacosProject
  7. cloud:
  8. nacos:
  9. discovery:
  10.         #Nacos 注册中心的地址
  11. server-addr: 127.0.0.1:8848
  12. #注册到不同的命名空间 加上命名空间ID 如果默认为public 则namespace则不用配置
  13. namespace: f1546389-b623-4424-aff0-b8a392219afb

2、在启动类中加入注解 @EnableDiscoveryClient


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

3、 启动服务器

  • 注:Nacos的运行需要以至少2C4g60g*3的机器配置下运行。

  • Linux/Unix/Mac Nacos启动命令

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

sh startup.sh -m standalone

如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

bash startup.sh -m standalone

  • Linux/Unix/Mac Nacos关闭命令

sh shutdown.sh

Windows Nacos启动命令

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

startup.cmd -m standalone

Windows Nacos关闭命令

shutdown.cmd 或者双击shutdown.cmd运行文件。

配置完上面的基本没什么问题,启动服务后就可以在nacos注册中心内看到注册的服务了。这里只是单纯的记录了整合nacos,如果有其他需要请自行添加。

三、使用注册中心出错问题解决

  1. 问题:

如果配置好了注册中心,在启动过程中出现下面的问题,多半是由于版本导致的问题

解决办法:根据版本说明,选择正确的版本依赖

四、使用配置中心

1、 添加配置中心的配置文件


   
  1. server:
  2. port: 8089
  3. spring:
  4. profiles:
  5. active: dev
  6. #需要定义应用名称
  7. application:
  8. name: nacosProject
  9. cloud:
  10. nacos:
  11. #配置nacos配置中心
  12. discovery:
  13. #Nacos 注册中心的地址
  14. server-addr: 111.11.103.215:8848
  15. #注册到不同的命名空间 加上命名空间ID 如果默认为public 则namespace则不用配置
  16. namespace: e1eee36e-4fcf-47e2-856b-1d49a1bce3d9
  17. #配置nacos配置中心
  18. config:
  19. server-addr: 111.11.103.215:8848 #配置中心的地址
  20. file-extension: yml #后缀名
  21. group: DEFAULT_GROUP #分组
  22. namespace: e1eee36e-4fcf-47e2-856b-1d49a1bce3d9 #命名空间的id

2、 创建一个application.yml文件 自定义本地的值,跟nacos做区分


   
  1. ruoyi:
  2. # 名称
  3. name: 本地1
  4. # 版本
  5. version: 3.3.3

3、 创建一个测试类


   
  1. import org.springframework.beans.factory.annotation.Value;
  2. import org.springframework.cloud.context.config.annotation.RefreshScope;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RestController;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. /**
  8. * @ Description:
  9. * @PACKAGE_NAME: com.nacos.nacosproject.controller
  10. * @date 2023-01-31 11:19
  11. */
  12. @RefreshScope
  13. @RestController //自动刷新注解
  14. @RequestMapping("/order")
  15. public class OrderController {
  16. @Value("${ruoyi.name}")
  17. private String name;
  18. @Value("${ruoyi.version}")
  19. private String version;
  20. @RequestMapping("/getOrder")
  21. public Map<Object,Object> tesController (){
  22. Map<Object,Object> map = new HashMap<>();
  23. map.put( "name",name);
  24. map.put( "age",version);
  25. return map;
  26. }
  27. }

4、 在IDEA 中添加环境变量

spring.cloud.bootstrap.enabled=true

5、 然后测试接口看是否能获取到nacos配置文件上的值


转载:https://blog.csdn.net/mws666/article/details/128812515
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场