java项目集成nacos,实现配置加载以及服务子发现
背景
业务需要,新建了一个接口代理转发模块。有如下配置:
src/main/resources/application.yml
Markup 全选
server:
port: 9270
proxy:
target-url: https://www.***.com/product/api # 目标服务器地址
api-key: xbY1*******************RqxV6 # API密钥
user: m****
password: 123456
source-urls:
- https://www.***.com/product/api
- https://120.68.94.123:29110/product/api
replace-url: http://127.0.0.1:9270 # 代理服务器地址
目标
- nacos配置读取,服务自发现
- 改造项目docker部署以及Jenkins流水线配置
一、nacos集成
1.1 nacos添加配置
Data id要和下面的bootstrap.yml
中 spring.application.name
保持一致,不然会取不到配置
1.2 项目添加依赖引用
pom.xml中添加nacos相关依赖。
XML 全选
<properties>
<com-alibaba-cloud.version>2.2.5.RELEASE</com-alibaba-cloud.version>
</properties>
XML 全选
<dependencies>
<!-- SpringCloud Ailibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${com-alibaba-cloud.version}</version>
</dependency>
<!-- SpringCloud Ailibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${com-alibaba-cloud.version}</version>
</dependency>
</dependencies>
1.3 删除application.yml中的配置
因为配置要从nacos中获取,因此从application.yml中删除相关配置
1.4 新建bootstrap.yml文件
文件名: src/main/resources/bootstrap.yml
文件内容
Markup 全选
spring:
application:
name: proxy-epicor
cloud:
nacos:
config:
# 配置中心地址
server-addr: ${nacos.config.server-addr}
namespace: ${nacos.config.namespace}
group: ${nacos.config.group}
# 配置文件格式
file-extension: yaml
discovery:
# 服务注册地址
server-addr: ${nacos.discovery.server-addr}
namespace: ${nacos.discovery.namespace}
spring.application.name 要和nacos
中配置的 data id
保持一致。不然无法正确获取配置
1.5 修改IDEA的运行/调试配置
配置如下:
Markup 全选
-Dspring.profiles.active=dev
-Dserver.port=9270
-Dnacos.config.server-addr=192.168.10.100:8848
-Dnacos.config.namespace=smartinsight-dev
-Dnacos.config.group=SMARTINSIGHT_GROUP
-Dnacos.discovery.namespace=smartinsight-dev
-Dnacos.discovery.server-addr=192.168.10.100:8848
1.6 在启动类上添加@EnableDiscoveryClient注解
如果报错。是因为依赖没有刷新。执行一下 maven clean install 即可
1.7 启动项目,测试配置参数是否正确加载
nacos服务中也可以看到proxy-epicor的服务节点
二、项目Docker编译以及Jenkins流水线配置
2.1 Docker镜像build改造
编译docker镜像需要
修改pom.xml文件
build节点中添加一个plugin
XML 全选
<!-- 构建配置 -->
<build>
<plugins>
<!-- Spring Boot Maven插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<!-- 排除Lombok依赖,避免打包到最终jar中 -->
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<!-- Docker Maven插件 - 用于构建Docker镜像 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<!-- Docker镜像名称 -->
<imageName>${docker.imageName}</imageName>
<!-- Docker镜像标签 -->
<imageTags>
<imageTag>${docker.imageTag}</imageTag>
</imageTags>
<!-- Dockerfile所在目录 -->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!-- Docker构建参数 -->
<buildArgs>
<!-- 环境配置 -->
<ARG_PROFILE_ENV>${package.environment}</ARG_PROFILE_ENV>
<!-- JVM启动参数 -->
<ARG_JAVA_OPTS>${docker.buildArgs.javaOpts}</ARG_JAVA_OPTS>
<!-- 服务名称 -->
<ARG_SERVICE_NAME>${project.artifactId}</ARG_SERVICE_NAME>
<!-- 服务端口 -->
<ARG_PORT>${docker.port}</ARG_PORT>
<!-- 版本号 -->
<ARG_VERSION>${project.version}</ARG_VERSION>
</buildArgs>
<!-- 构建资源文件 -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>*.zip</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Maven Assembly插件 - 用于生成zip包 -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<!-- 最终文件名格式:项目名-版本-环境 -->
<finalName>${project.artifactId}-${project.version}-${package.environment}</finalName>
<!-- 不追加assemblyId到文件名 -->
<appendAssemblyId>false</appendAssemblyId>
<!-- 使用自定义的assembly描述文件 -->
<descriptors>
<descriptor>src/assembly/assembly-descriptor.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
<!-- Maven Deploy插件 - 用于部署到远程仓库 -->
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<!-- 跳过部署,避免意外发布 -->
<skip>true</skip>
</configuration>
</plugin>
<!-- Maven Source插件 - 用于生成源码包 -->
<plugin>
<artifactId>maven-source-plugin</artifactId>
<configuration>
<!-- 跳过源码包生成 -->
<skipSource>true</skipSource>
</configuration>
</plugin>
</plugins>
</build>
添加 profiles配置
XML 全选
<profiles>
<profile>
<!-- for open source usage -->
<id>dev</id>
<properties>
<package.environment>dev</package.environment>
<docker.port>9270</docker.port>
<docker.imageTag>${project.version}</docker.imageTag>
<docker.imageName>crpi-****.cn-hangzhou.personal.cr.aliyuncs.com/smart_insight/proxy-epicor:${docker.imageTag}</docker.imageName>
<docker.buildArgs.javaOpts>-Dactive_profile=dev -Dnacos.config.server-addr=192.168.10.100:8848 -Dnacos.config.namespace=smartinsight-dev -Dnacos.config.group=SMARTINSIGHT_GROUP -Dnacos.discovery.server-addr=192.168.10.100:8848 -Dnacos.discovery.namespace=smartinsight-dev</docker.buildArgs.javaOpts>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
添加 Maven仓库配置
XML 全选
<!-- Maven仓库配置 -->
<repositories>
<!-- 公共仓库 -->
<repository>
<id>maven-public</id>
<!-- <url>http://maven.aihomcloud.com/repository/maven-public/</url> -->
<url>http://192.168.10.100:8081/repository/maven-public/</url>
</repository>
</repositories>
<!-- 发布仓库配置 -->
<distributionManagement>
<!-- 正式版本发布仓库 -->
<repository>
<id>maven-releases</id>
<name>Nexus Release Repository</name>
<!-- <url>http://maven.aihomcloud.com/repository/maven-releases/</url> -->
<url>http://192.168.10.100:8081/repository/maven-releases/</url>
</repository>
<!-- 快照版本发布仓库 -->
<snapshotRepository>
<id>maven-snapshots</id>
<name>Nexus Snapshot Repository</name>
<!-- <url>http://maven.aihomcloud.com/repository/maven-snapshots/</url> -->
<url>http://192.168.10.100:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
完整的pom.xml
XML 全选
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 项目基本信息 -->
<groupId>com.proxy</groupId>
<artifactId>proxy-epicor</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 继承Spring Boot父项目 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.7.RELEASE</version>
</parent>
<!-- 项目属性配置 -->
<properties>
<java.version>1.8</java.version>
<com-alibaba-cloud.version>2.2.5.RELEASE</com-alibaba-cloud.version>
</properties>
<!-- 项目依赖 -->
<dependencies>
<!-- Spring Boot Web启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Actuator监控启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Lombok简化代码工具 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- 阿里云Nacos服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${com-alibaba-cloud.version}</version>
</dependency>
<!-- 阿里云Nacos配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${com-alibaba-cloud.version}</version>
</dependency>
</dependencies>
<!-- 构建配置 -->
<build>
<plugins>
<!-- Spring Boot Maven插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<!-- 排除Lombok依赖,避免打包到最终jar中 -->
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<!-- Docker Maven插件 - 用于构建Docker镜像 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<!-- Docker镜像名称 -->
<imageName>${docker.imageName}</imageName>
<!-- Docker镜像标签 -->
<imageTags>
<imageTag>${docker.imageTag}</imageTag>
</imageTags>
<!-- Dockerfile所在目录 -->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!-- Docker构建参数 -->
<buildArgs>
<!-- 环境配置 -->
<ARG_PROFILE_ENV>${package.environment}</ARG_PROFILE_ENV>
<!-- JVM启动参数 -->
<ARG_JAVA_OPTS>${docker.buildArgs.javaOpts}</ARG_JAVA_OPTS>
<!-- 服务名称 -->
<ARG_SERVICE_NAME>${project.artifactId}</ARG_SERVICE_NAME>
<!-- 服务端口 -->
<ARG_PORT>${docker.port}</ARG_PORT>
<!-- 版本号 -->
<ARG_VERSION>${project.version}</ARG_VERSION>
</buildArgs>
<!-- 构建资源文件 -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>*.zip</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Maven Assembly插件 - 用于生成zip包 -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<!-- 最终文件名格式:项目名-版本-环境 -->
<finalName>${project.artifactId}-${project.version}-${package.environment}</finalName>
<!-- 不追加assemblyId到文件名 -->
<appendAssemblyId>false</appendAssemblyId>
<!-- 使用自定义的assembly描述文件 -->
<descriptors>
<descriptor>src/assembly/assembly-descriptor.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
<!-- Maven Deploy插件 - 用于部署到远程仓库 -->
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<!-- 跳过部署,避免意外发布 -->
<skip>true</skip>
</configuration>
</plugin>
<!-- Maven Source插件 - 用于生成源码包 -->
<plugin>
<artifactId>maven-source-plugin</artifactId>
<configuration>
<!-- 跳过源码包生成 -->
<skipSource>true</skipSource>
</configuration>
</plugin>
</plugins>
</build>
<!-- Maven Profile配置 -->
<profiles>
<!-- 开发环境配置 -->
<profile>
<id>dev</id>
<properties>
<!-- 打包环境标识 -->
<package.environment>dev</package.environment>
<!-- Docker容器端口 -->
<docker.port>9270</docker.port>
<!-- Docker镜像标签 -->
<docker.imageTag>${project.version}</docker.imageTag>
<!-- Docker镜像完整名称 -->
<docker.imageName>crpi-***.cn-hangzhou.personal.cr.aliyuncs.com/smart_insight/proxy-epicor:${docker.imageTag}</docker.imageName>
<!-- Docker构建时的JVM参数 -->
<docker.buildArgs.javaOpts>-Dactive_profile=dev -Dnacos.config.server-addr=192.168.10.100:8848 -Dnacos.config.namespace=smartinsight-dev -Dnacos.config.group=SMARTINSIGHT_GROUP -Dnacos.discovery.server-addr=192.168.10.100:8848 -Dnacos.discovery.namespace=smartinsight-dev</docker.buildArgs.javaOpts>
</properties>
<!-- 默认激活此profile -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
<!-- Maven仓库配置 -->
<repositories>
<!-- 公共仓库 -->
<repository>
<id>maven-public</id>
<!-- <url>http://maven.aihomcloud.com/repository/maven-public/</url> -->
<url>http://192.168.10.100:8081/repository/maven-public/</url>
</repository>
</repositories>
<!-- 发布仓库配置 -->
<distributionManagement>
<!-- 正式版本发布仓库 -->
<repository>
<id>maven-releases</id>
<name>Nexus Release Repository</name>
<!-- <url>http://maven.aihomcloud.com/repository/maven-releases/</url> -->
<url>http://192.168.10.100:8081/repository/maven-releases/</url>
</repository>
<!-- 快照版本发布仓库 -->
<snapshotRepository>
<id>maven-snapshots</id>
<name>Nexus Snapshot Repository</name>
<!-- <url>http://maven.aihomcloud.com/repository/maven-snapshots/</url> -->
<url>http://192.168.10.100:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
</project>
2.2 添加启动脚本文件 src/main/scripts/startup.sh
docker容器需要这个启动脚本
文件内容
PowerShell 全选
#!/bin/bash
## Adjust memory settings if necessary
#export JAVA_OPTS="-Xms2560m -Xmx2560m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=1536m -XX:MaxNewSize=1536m -XX:SurvivorRatio=8"
## Only uncomment the following when you are using server jvm
#export JAVA_OPTS="$JAVA_OPTS -server -XX:-ReduceInitialCardMarks"
#export JAVA_OPTS="$JAVA_OPTS -XX:+UseParNewGC -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+ScavengeBeforeFullGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSPermGenSweepingEnabled -XX:CMSInitiatingPermOccupancyFraction=70 -XX:+ExplicitGCInvokesConcurrent -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"
#export JAVA_OPTS="$JAVA_OPTS -Xloggc:$LOG_DIR/heap_trace.txt -XX:HeapDumpPath=$LOG_DIR/HeapDumpOnOutOfMemoryError/"
PATH_TO_JAR=$SERVICE_NAME".jar"
cd `dirname $0`/..
for i in `ls $SERVICE_NAME-*.jar 2>/dev/null`
do
if [[ ! $i == *"-sources.jar" ]]
then
PATH_TO_JAR=$i
break
fi
done
ulimit -c unlimited
if [[ ! -f PATH_TO_JAR && -d current ]]; then
cd current
for i in `ls $SERVICE_NAME-*.jar 2>/dev/null`
do
if [[ ! $i == *"-sources.jar" ]]
then
PATH_TO_JAR=$i
break
fi
done
fi
if [[ -f $SERVICE_NAME".jar" ]]; then
rm -rf $SERVICE_NAME".jar"
fi
printf "$(date) ==== Starting ==== \n"
ln $PATH_TO_JAR $SERVICE_NAME".jar"
chmod a+x $SERVICE_NAME".jar"
echo "java -jar ${JAVA_OPTS//+/ } $SERVICE_NAME.jar"
eval "java -jar ${JAVA_OPTS//+/ } $SERVICE_NAME.jar"
printf "\n$(date) Server started!\n"
exit 0;
2.3 添加src/main/docker目录
添加两个文件
src/main/docker/.dockerignore
src/main/docker/Dockerfile
.dockerignore根据需要添加,本项目不需要忽略文件,因此内容为空就行
Dockerfile文件内容如下:
Markup 全选
FROM crpi-******.cn-hangzhou.personal.cr.aliyuncs.com/smart_insight/openjdk-build:9
LABEL name="GarsonZhang"
LABEL email="garson_zhang@163.com"
ARG ARG_PROFILE_ENV
ARG ARG_JAVA_OPTS
ARG ARG_SERVICE_NAME
ARG ARG_PORT
ARG ARG_VERSION
ENV SERVICE_NAME ${ARG_SERVICE_NAME}
ENV PORT ${ARG_PORT}
ENV VERSION ${ARG_VERSION}
ENV PROFILE_ENV ${ARG_PROFILE_ENV}
ENV JAVA_OPTS ${ARG_JAVA_OPTS}
ADD ${SERVICE_NAME}-${VERSION}-${PROFILE_ENV}.zip /${SERVICE_NAME}/${SERVICE_NAME}-${VERSION}-${PROFILE_ENV}.zip
RUN unzip /${SERVICE_NAME}/${SERVICE_NAME}-${VERSION}-${PROFILE_ENV}.zip -d /${SERVICE_NAME} \
&& rm -rf /${SERVICE_NAME}/${SERVICE_NAME}-${VERSION}-${PROFILE_ENV}.zip \
&& sed -i '$d' /${SERVICE_NAME}/scripts/startup.sh \
&& echo "tail -f /dev/null" >> /${SERVICE_NAME}/scripts/startup.sh \
&& cp /${SERVICE_NAME}/lib/read.md /usr/lib/read.md
RUN ["chmod", "a+x","-R", "/usr/lib/read.md"]
EXPOSE ${PORT}
CMD /${SERVICE_NAME}/scripts/startup.sh
2.4 添加settings.xml
jenkins流水线需要这个文件配置编译环境
文件内容
XML 全选
<settings>
<pluginGroups>
<pluginGroup>org.jenkins-ci.tools</pluginGroup>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<!-- Give access to Jenkins plugins -->
<profile>
<id>jenkins</id>
<activation>
<activeByDefault>true</activeByDefault> <!-- change this to false, if you don't like to have it on per default -->
</activation>
<repositories>
<repository>
<id>maven-public</id>
<url>http://192.168.10.100:8081/repository/maven-public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven-releases</id>
<url>http://192.168.10.100:8081/repository/maven-releases/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>maven-snapshots</id>
<url>http://192.168.10.100:8081/repository/maven-snapshots/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<servers>
<server>
<id>maven-releases</id>
<username>***</username>
<password>***</password>
</server>
<server>
<id>maven-snapshots</id>
<username>***</username>
<password>***</password>
</server>
</servers>
<mirrors>
<mirror>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
<mirrorOf>m.g.o-public</mirrorOf>
</mirror>
</mirrors>
</settings>
2.5 修改src/assembly/assembly-descriptor.xml
参考内容
XML 全选
<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
<id>package</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<!--scripts -->
<fileSet>
<directory>src/main/scripts</directory>
<outputDirectory>scripts</outputDirectory>
<includes>
<include>*.sh</include>
</includes>
<fileMode>0755</fileMode>
<lineEnding>unix</lineEnding>
</fileSet>
<!--artifact -->
<fileSet>
<directory>target</directory>
<outputDirectory>${file.separator}</outputDirectory>
<includes>
<include>${project.artifactId}-*.jar</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>
<!-- <fileSet>-->
<!-- <directory>${project.build.directory}</directory>-->
<!-- <outputDirectory>/</outputDirectory>-->
<!-- <includes>-->
<!-- <include>*.jar</include>-->
<!-- </includes>-->
<!-- </fileSet>-->
</fileSets>
</assembly>
Jenkins构建作业
Docker部署
docker-compose.yml脚本
Ruby 全选
version: '3'
services:
zhuoyu-proxy-epicor:
container_name: zhuoyu-proxy-epicor
image: crpi-***.cn-hangzhou.personal.cr.aliyuncs.com/smart_insight/proxy-epicor:latest
restart: always
ports:
- 18098:8080
environment:
- TZ=Asia/Shanghai
- JAVA_OPTS=-Dspring.main.allow-bean-definition-overriding=true -Dnacos.config.namespace=smartinsight-dev -Dnacos.config.group=SMARTINSIGHT_GROUP -Dnacos.config.server-addr=192.168.10.100:8848 -Dnacos.discovery.namespace=smartinsight-dev -Dnacos.discovery.server-addr=192.168.10.100:8848
Docker容器接口请求测试
Docker容器请求测试:
nacos服务也有自动注册
网关接口测试
添加网关
重启网关docker容器
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
java 张国生