微服务架构接入Nacos —— 基于JDK 17和Spring Boot 3.3.4

在现代微服务架构中,服务注册和配置管理是至关重要的组件。Nacos 作为阿里巴巴开源的一站式解决方案,集成了服务注册、发现、配置管理、动态DNS服务等功能,非常适合微服务架构的需求。在本文中,我们将基于 JDK 17Spring Boot 3.3.4 来接入 Nacos,以实现服务注册与配置管理的功能。

为什么选择 JDK 17 和 Spring Boot 3.3.4?
  • JDK 17:作为当前长期支持 (LTS) 版本,它稳定性高,性能提升显著,适合在生产环境中长期使用。
  • Spring Boot 3.3.4:是一个现代、成熟的开发框架,提供了对 Spring Cloud 和 Nacos 的良好兼容,能帮助我们快速构建和管理微服务应用。

接下来,我们将逐步演示如何使用 Docker 部署 Nacos 并在 Spring Boot 项目中接入 Nacos,实现微服务的注册与配置管理。

1.首先我们在父类工程中加入对应的依赖版本

# 这里用2023.0.1.0版本后续如果需要修改版本在这里修改即可
<properties>
    <alibaba.version>2023.0.1.0</alibaba.version>
</properties>

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2023.0.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
</dependencies>

然后我们在响应的子类中添加依赖和配置(我就随便拿我一个子类举例)

<dependencies>

        <!-- Nacos 服务发现 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${alibaba.version}</version>
        </dependency>
        <!-- Nacos 配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>${alibaba.version}</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
</dependencies>

ps:一定要确认这个是父子级关系不然${alibaba.version}会爆红

2.服务器上Nacos安装部署

1. 拉取 Nacos Docker 镜像

在你的 CentOS 7 服务器上,使用 Docker 拉取 Nacos 镜像(推荐用2.2.0版本)。运行以下命令:

docker pull nacos/nacos-server:latest

2. 启动 Nacos 容器

启动 Nacos 容器时,可以设置一些环境变量来配置 Nacos 的行为(PS:这里我建议把9849,9848端口都开放不然到时候会报连接超时的错,问题很抽象具体原因可以去看官网文档)。执行以下命令来启动 Nacos:

docker run -d --name nacos-standalone \
  -e MODE=standalone \
  -e PREFER_HOST_MODE=hostname \
  --restart=always \
  -p 8848:8848 \
  -p 9848:9848 \
  -p 9849:9849 \
  nacos/nacos-server:latest

解释

  • -d:以后台模式运行容器。
  • --name nacos-standalone:指定容器的名称为 nacos-standalone
  • -e MODE=standalone:设置 Nacos 运行在单机模式下。
  • --restart=always:配置容器在异常退出时自动重启。
  • -e PREFER_HOST_MODE=hostname:这个变量指定 Nacos 使用主机名作为服务注册的地址,如果你的容器内外访问都需要使用主机名,这个配置是有用的。
  • -p 8848:8848:将宿主机的 8848 端口映射到容器的 8848 端口,这样你可以通过 http://your-server-ip:8848 访问 Nacos 控制台。

3.配置防火墙(如果有需要)

如果你的服务器上有防火墙,请确保开放 8848 端口来允许外部访问:

firewall-cmd --permanent --add-port=8848/tcp
firewall-cmd --permanent --add-port=9848/tcp
firewall-cmd --permanent --add-port=9849/tcp
firewall-cmd --reload

PS:如果是阿里云服务器可以直接在安全组中修改如图

4.打印一下nacos的log日志看下是否能正常启动,或者是直接容器请求看是否能正常请求

docker logs nacos-server

其他问题的补充如果上面地址连接不上,就去CMD中敲如下命令

# 这个请求地址是你自己的公网IP地址!
curl http://47.238.***.**:8848/nacos/v1/ns/operator/metrics

如果结果显示{"status":"UP"}就证明是可以连接上的,报caused: Param 'serviceName' is required.则是不行

还有有种可能连不上你仔进入到容器内部访问试试:

# (这里是你nacos容器的名称)
docker exec -it younacos /bin/bash
# 8848左边是nacos容器的名称,你也可以用你的公网ip
curl -I http://nacos-server:8848/nacos/index.html

如果结果输出差不多是这样开头的话就证明成功了:

HTTP/1.1 200 
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Security-Policy: script-src 'self'.......

如果还是不行就去百度nacos从内部访问不到,这我就建议你把容器删了重新安装部署试试。

3.项目连接nacos

1.首先我们去配置文件里面添加注解注意是子类的启动类里面加上

@EnableDiscoveryClient

2.再去修改子类的配置文件:

spring:
  config:
    import: optional:nacos:/${spring.application.name}.yml
  cloud:
    nacos:
      discovery:
        server-addr: 47.238.**.**:8848 #这里填你的公网IP地址
        connect-timeout: 10000 # 连接超时设置为5000毫秒
        retry:
          max-attempts: 5  # 设置最大重试次数
      config:
        server-addr: 47.238.**.***:8848
        file-extension: yml
        refresh-enabled: true # 自动刷新配置
        timeout: 10000 # 配置文件读取的超时时间

3.最后启动项目如果是这样的就证明成功了!

如果后续需要将其他子类注册到nacos中就把配置写到子类的yml配置中去,然后去服务列表查看它是否注册成功(如果将服务关闭列表里面就会消失你关闭的服务),过程中可能还会遇到其他问题基本上百度或者问GPT都能解决我就不一一赘述了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值