微服务搭建----springboot接入Nacos2.x

springboot接入Nacos2.x

nacos之前用的版本是1.0的,现在重新搭建一个2.0版本的,学如逆水行舟,不进则退,废话不多说,开搞

1、 nacos2.x搭建

1,首先第一步查询下项目之间的版本对照,不然后期会出现各种无法预测的版本冲突问题,今天就是复现了,可以参考链接:
版本对照

2,下载nacos,可以通过下方下载地址下载对应的版本
nacos下载地址

3,将下载之后的文件解缩后

4,解压成功后,进入bin文件通过cmd执行命令:startup.cmd -m standalone,然后执行成功了,通过链接进入了nacos后台

复制代码
http://localhost:8848/nacos


5,很简单是不是,但是这里有个小坑,2.4.3的这个版本,初始化是没有账号密码的 ,一开始我是有下载1.x的其他版本,他是需要输入账号密码的,初始账号密码是,nacos acos,然后很操蛋的事情来了,因为是停留在登录页面,所以他是要求你输入密码,但是2.4.3没有初始账号密码,所以点击登录一直提示账号密码失败,当时很纳闷,没改过密码呀,怎么就是不对呀,纳闷了好久,后面不小心关了链接,重新点击http://localhost:8848/nacos,他进去了,他进去了!!!

6,回到正题,密码怎么办呢?那就开启鉴权,把账号密码加起来,再把数据库也建立进去,配置如下

复制代码
##修改conf/application.properties文件

nacos.core.auth.enabled=true
# 必须设置
# 用于在请求 nacos 时,请求头添加key:value信息,可通过验证
nacos.core.auth.server.identity.key=example
nacos.core.auth.server.identity.value=example
# 设置用于生成token的密钥, 需要原文不低于32位的Base64加密的结果, 
nacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=

7,开启之后,直接通过:http://localhost:8848/nacos,会有如下的提示,然后首次登录也是设置密码

2,构建springboot项目,使用的maven进行构建

pom文件
复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>Demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Demo</name>
    <description>Demo</description>

    <properties>
        <java.version>1.8</java.version>
        <spring.version>4.2.5.RELEASE</spring.version>
        <nacos-config-spring-boot.version>0.2.1</nacos-config-spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- Spring Boot Test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <!-- JUnit 5 (Jupiter) -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>
        <!-- nacos服务注册/发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
2、配置文件配置

1,这里有个点需要注意的是,配置文件用bootstrap.yml进行配置,而不是application.yml,为什么呢?因为如果使用的是application进行配置的话,虽然也能注册到nacos去,但是nacos的配置文件是无法读取成功的

复制代码
#应用服务名称
server:
  port: 8081
spring:
  application:
    name: order-core
  profiles:
    active: test #可选值dev test uat prod
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #服务注册中心地址
        namespace: ${spring.profiles.active} #指定命名空间
        username: nacos #用户名
        password: nacos #密码
      config:
        server-addr: ${spring.cloud.nacos.discovery.server-addr} #服务配置中心地址
        namespace: ${spring.profiles.active} #指定命名空间
        username: ${spring.cloud.nacos.discovery.username} #用户名
        password: ${spring.cloud.nacos.discovery.password} #密码
        file-extension: yml #配置文件后缀
        shared-configs:
          - data-Id: springcloud.yml
            refresh: true
          - data-Id: datasource.yml
            refresh: true
management:
  health:
    defaults:
      enabled: false

3,项目启动成功后,就可以在nacos的服务列表中看到了

4,验证配置文件是否能读取到

复制代码
package com.example.demo.controller;

import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.alibaba.nacos.api.exception.NacosException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

import static org.springframework.web.bind.annotation.RequestMethod.GET;

/**
 * @author:Deng
 * @date: 2024-11-27 15:42
 * @remark:
 */
@RestController
public class TestController {
   
    @Value("${dd.aa}")
    private String aa;

    @RequestMapping(value = "/get", method = GET)
    @ResponseBody
    public String get() {
        return aa;
    }
}


4,再记录一点,当nacos和springboot或者springclound版本存在冲突时,会在启动时出现403的错误,出现这个错误时,可根据1.1提到的进行版本对照修改,以及在配置配置文件时,命名空间的data-Id也要一一对应,下一步就是搭建服务间远程调用OpenFeign

相关推荐
阳光是sunny6 小时前
Vue 项目怎么做用户行为全链路监控?轻量插件方案详解
前端·面试·架构
EMA12 小时前
Docker虚拟化失败解决方案
架构
李斯维12 小时前
从历史的角度看 Android 软件架构
android·架构·android jetpack
Flynt14 小时前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
JouYY15 小时前
聊一下多 Agent 编排架构的应用实践
架构·llm·agent
Sunia15 小时前
《AgentX 专栏》10-生产部署:3台2C4G云服务器把企业级Agent真正跑起来的完整方案
java·架构
ZhengEnCi2 天前
Q01-高并发点赞系统架构设计
架构
掉鱼的猫2 天前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·spring boot
笨鸟飞不快2 天前
从 MVC 到 DDD:一次真实的渐进式迁移实录
后端·架构
人活一口气2 天前
Spring Boot与AIGC的完美结合:从零搭建智能内容生成平台
java·spring boot·aigc