说明:本文中Nacos和Sentinel已配置在一独立主机上作为系统服务运行。
1.1.在Nacos中建立相应配置文件信息

在本例中,建立了四个公用的yaml配置文件信息。在实际开发中,如果无sentinel限流需求,平时一般只需修改com.lerx.unaid.gateway.yml就可以了。
--> com.lerx.unaid.datasource.yml :用于数据库连接
--> com.lerx.unaid.jpa.yml : JPA相关设置,如果另外用的mytais,可能需要在此设置。
--> com.lerx.unaid.gateway.yml : 应用网关配置
--> com.lerx.unaid.sentinel.yml : 降级限流
1.2.建立应用网关子Module
这个很简单,可以参考下一篇的建子Module的方法。因为这个模块开发好后,我们就可以将它进行布署,以后基本就不会动它了。最终结果如下:
--> GatewayApplication.java
package com.lerx.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
--> application.yml
server:
port: 18888
spring:
application:
name: pub-gateway
cloud:
nacos:
discovery:
server-addr: 192.168.6.31:8848 #Nacos服务注册中心地址
namespace: public
username: nacos
password: nacos
config:
server-addr: 192.168.6.31:8848 #Nacos作为配置中心地址
# gateway:
# routes:
# - id: ip-query
# predicates:
# - Query=ip
# - Path=/pub-ip-query/**
# uri: lb://pub-ip-query
# filters:
# - StripPrefix=1
--> pom.xml
<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>com.lerx.unaid</groupId> <artifactId>union-aid-system</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>pub-gateway</artifactId> <name>pub-gateway</name> <description>Public Gateway</description> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!--nacos-服务注册、发现 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> </plugins> </build> </project>
1.3.将 app gateway 子模块布署运行到服务器中 (此处以linux为例)
其实在开发过程中,应用网关模块如果是采用本例中的配置文件方式运行的,应在这一步将它进行部署运行。以后除了在Nacos中对它进行配置,其它就不再管它了。所以将它首先进行布署很重要。

右键pub-gateway子项目,点击 Run as --> Maven install,重成jar包。本例生成的jar文件路径为:D:\app\apache-maven-3.8.4\repository\com\lerx\unaid\pub-gateway\0.0.1-SNAPSHOT\pub-gateway-0.0.1-SNAPSHOT.jar
在Linux服务器中,安装Java 环境,此处过程从略。
考虑到空间问题,本例将所有应用均安装在 /home/springcloud 下。所以建立所需目录,mkdir、useradd均可。
mkdir /home/springcloud /* *或执行以下命令 useradd springcloud */
在本机准备一个文件夹,将pub-gateway.jar拷贝到这个目录下,以后布署所有子模块均以此文件夹为模板进行上传及布署。
上图中logs,pid均为空文件夹。
application.yml是gateway模块中的配置文件,如果采用默认配置,以后不需要修改应用名和端口号,该文件可省略。
pub-gateway-0.0.1-SNAPSHOT.jar文件是刚生成的jar复制到此处。
在bin目录下编写启动和停止脚本。
--> startup.sh (启动服务)
#!/bin/sh HOME_PATH=/home/springcloud/pub-gateway APP_NAME=pub-gateway MAIN_JAR=pub-gateway-0.0.1-SNAPSHOT.jar #SKYWALKING_JAR=/usr/local/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar #SKYWALKING_SRV=192.168.6.33:11800 cd $HOME_PATH #nohup /usr/java/jre1.8.0_271/bin/java -Dspring.config.location=$HOME_PATH/application.yml,$HOME_PATH/bootstrap.yml -Dlogging.file=$HOME_PATH/logs/run.log -javaagent:$SKYWALKING_JAR -DSW_AGENT_NAME=$APP_NAME -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=$SKYWALKING_SRV -jar $HOME_PATH/$MAIN_JAR > $HOME_PATH/logs/run.out 2>&1 & nohup /usr/java/jre1.8.0_271/bin/java -Dspring.config.location=$HOME_PATH/application.yml -Dlogging.file=$HOME_PATH/logs/run.log -jar $HOME_PATH/$MAIN_JAR > $HOME_PATH/logs/run.out 2>&1 & echo $! > $HOME_PATH/pid/runing.pid
--> shutdown.sh (停止服务)
#!/bin/sh
HOME_PATH=/home/springcloud/pub-gateway
PID=$(cat $HOME_PATH/pid/runing.pid)
kill -9 $PID
find $HOME_PATH/pid/ -name "*.pid" -exec rm -rf {} \;
find $HOME_PATH/logs/ -name "*.out" -exec rm -rf {} \;
将pub-gateway上传到服务器上的 /home/springcloud 下。执行下面的命令,给pub-gateway文件夹赋予相应的权限。
chmod 755 -Rf /home/springcloud/pub-gateway
执行startup.sh启动app gateway服务。
cd /home/springcloud/pub-gateway/bin ./startup.sh
观察logs文件夹中的run.log,无报错的话,则应该在 Nacos 中的服务列表中会看见 pub-gateway 已成功启动。
可以编写service服务启动文件:/usr/lib/systemd/system/myapp-pub-gateway.service
[Unit] Description=myapp-pub-gateway After=network.target [Service] Type=forking User=root ExecStart=/home/springcloud/pub-gateway/bin/startup.sh ExecStop=/home/springcloud/pub-gateway/bin/shutdown.sh PrivateTmp=true [Install] WantedBy=multi-user.target
将服务加入启动列表
chmod 754 /usr/lib/systemd/system/myapp-pub-gateway.service systemctl enable myapp-pub-gateway.service
现在可以利用 systemctl start | stop myapp-pub-gateway.service 来控制了,并且该服务在服务器通电启动后会自动启动运行。