说明:本文中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 来控制了,并且该服务在服务器通电启动后会自动启动运行。