文章目录
- 前言
- [一、 模板服务](#一、 模板服务)
-
- [1.1 在父工程下创建 mstemplate 子工程](#1.1 在父工程下创建 mstemplate 子工程)
- [1.2 在 mstemplate 工程下在创建子工程](#1.2 在 mstemplate 工程下在创建子工程)
-
- [1.2.1 创建 mstemplate-api](#1.2.1 创建 mstemplate-api)
- [1.2.1 创建 mstemplate-service](#1.2.1 创建 mstemplate-service)
- [1.3 完成 mstemplate-service 的配置](#1.3 完成 mstemplate-service 的配置)
-
- [1.3.1 引入依赖](#1.3.1 引入依赖)
- [1.3.2 创建启动类](#1.3.2 创建启动类)
- [1.3.3 创建启动配置](#1.3.3 创建启动配置)
- [1.3.4 设置 nacos 命名空间](#1.3.4 设置 nacos 命名空间)
- [1.3.5 设置环境变量并启动](#1.3.5 设置环境变量并启动)
- 二、网关服务
-
- [2.1 在父工程下创建 gateway 服务](#2.1 在父工程下创建 gateway 服务)
-
- [2.1.1 在 gateway 服务下引入依赖](#2.1.1 在 gateway 服务下引入依赖)
- [2.1.2 创建启动类](#2.1.2 创建启动类)
- [2.1.3 创建 nacos 网关配置](#2.1.3 创建 nacos 网关配置)
- [2.1.4 编写bootstrap.yml](#2.1.4 编写bootstrap.yml)
- [2.2 启动 gateway 网关服务](#2.2 启动 gateway 网关服务)
- END
鸡汤:
● 哪怕只是认真吃了一顿饭,对镜子里的自己笑了一下,都是温柔的胜利。
● 云朵会下雨,种子会休眠,你累了就歇歇------休息不是退步,是给心灵充电。
前言
前面我们封装了 common-core 这个基础通用包,common-core 中封装了我们项目中常用的工具类。我们的工具类都是在业务中发挥他们的作用,现在我们就实现模板服务和网关服务。
一、 模板服务
模板服务没有具体的业务,只是一个模版,给开发者提供一个模板,有利于统一代码规范。
也是用来测试我们添加的一些中间件和工具类的服务。
1.1 在父工程下创建 mstemplate 子工程

1.2 在 mstemplate 工程下在创建子工程
1.2.1 创建 mstemplate-api
这个 mstemplate-api 是提供给服务之间的远程调用,一些对外提供的VO、DTO啥的也可以放在这里。以后的 openfeign 的客户端也会放在这里,模板服务不存在远程调用,这里只是打个样,告诉开发者这里的代码模版。

1.2.1 创建 mstemplate-service
** 这个 mstemplate-service 就是提供具体服务的工程了,接下来就把他创建出来。**

1.3 完成 mstemplate-service 的配置
1.3.1 引入依赖
注:不要看错,容易将 mstemplate-service 和 mstemplate 的 pom 文件搞混
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>
<parent>
<groupId>com.my</groupId>
<artifactId>mstemplate</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.my</groupId>
<artifactId>mstemplate-service</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>com.my</groupId>
<artifactId>common-core</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
1.3.2 创建启动类
在 java 源文件目录下创建 com.my.mstemplateservice 包

在这个mstemplateservice 包下创建启动类 MstemplateServiceApplication 类
java
package com.my.mstemplateservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MstemplateServiceApplication {
public static void main(String[] args) {
SpringApplication.run(MstemplateServiceApplication.class, args);
}
}
1.3.3 创建启动配置
在 resources包下创建 bootstrap.yml
bootstrap.yml 的作用就是在服务启动之前将 nacos 里的配置拉下来进行配置
bootstrap.yml :
yaml
server:
port: 18085
spring:
application:
name: mstemplate
profiles:
active: ${RUN_ENV}
cloud:
nacos:
discovery:
username: nacos
password: bite@123
namespace: frameworkjava-${RUN_ENV}
server-addr: ${NACOS_ADDR}
config:
username: nacos
password: bite@123
namespace: frameworkjava-${RUN_ENV}
server-addr: ${NACOS_ADDR}
file-extension: yaml
logging:
pattern:
console: '[%thread] %-5level %logger{36} - %msg%n'
注:
● 这里的{RUN_ENV} 和 {NACOS_ADDR} 在启动服务时候,会作为环境变量传入
● 想要使用 bootstrap.yml 需要引入依赖

1.3.4 设置 nacos 命名空间
咱们第一章应该已经将 nacos 啥的都已经部署好了。
访问 自己的云服务器外网ip/虚拟机内网ip:8848/nacos
账号:nacos
密码:bite@123 (前面设置的)


1.3.5 设置环境变量并启动
启动模板服务的启动类




启动服务

启动成功后访问 nacos 网页端显示为下图为 mstemplate 服务实现完毕

二、网关服务
2.1 在父工程下创建 gateway 服务

2.1.1 在 gateway 服务下引入依赖
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>
<parent>
<groupId>com.my</groupId>
<artifactId>frameworkjava</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.my</groupId>
<artifactId>gateway</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>com.my</groupId>
<artifactId>common-core</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.45.0</version>
<configuration>
<!--指定远程服务器的Docker服务访问地址-->
<dockerHost>${dockerhost.addr}</dockerHost>
<certPath>${project.basedir}/../deploy/test/app/config/cert</certPath>
<!--指定私有仓库的访问路径-->
<pushRegistry>${dockerregistry.url}</pushRegistry>
<!--指定库的用户名与密码-->
<authConfig>
<username>${dockerregistry.username}</username>
<password>${dockerregistry.password}</password>
</authConfig>
<containerNamePattern>${dockerregistry.namespace}-%n-%i</containerNamePattern>
<images>
<image>
<!--指定私有仓库访问地址/镜像名称-->
<name>${dockerregistry.namespace}/${project.build.finalName}:${project.version}</name>
<build>
<!--指定Dockerfile的路径-->
<dockerFileDir>${project.basedir}</dockerFileDir>
</build>
<run>
<ports>
<port>18080:18080</port>
</ports>
<env>
<NACOS_ADDR>${nacos.addr}</NACOS_ADDR>
<RUN_ENV>${runenv}</RUN_ENV>
<JAVA_OPTS>${java.opts.default}</JAVA_OPTS>
</env>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<id>build</id>
<phase>deploy</phase>
<goals>
<goal>stop</goal>
<goal>build</goal>
<goal>start</goal>
<!--推送到远端仓库 -->
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
2.1.2 创建启动类
在 java 目录下创建 com.my.gateway 包
创建 GatewayServiceApplication 启动类
java
package com.my.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class GatewayServiceApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayServiceApplication.class, args);
}
}
2.1.3 创建 nacos 网关配置
让网关服务在nacos中读取配置,首先 nacos 中要有配置


网关配置:
yaml
spring:
cloud:
gateway:
discovery:
locator:
lowerCaseServiceId: true
enabled: true
routes:
# 用户端服务
- id: bite-mstemplate
uri: lb://mstemplate
predicates:
- Path=/mstemplate/**
filters:
- StripPrefix=1
# 门户服务
- id: bite-portal
uri: lb://bite-portal
predicates:
- Path=/portal/**
filters:
- StripPrefix=1
# 鉴权模块
- id: bite-admin
uri: lb://bite-admin
predicates:
- Path=/admin/**
filters:
- StripPrefix=1
# 文件
- id: bite-file
uri: lb://bite-file
predicates:
- Path=/file/**
filters:
- StripPrefix=1
metadata:
response-timeout: 300000
connect-timeout: 300000
# 安全配置
security:
# 不校验白名单
ignore:
whites:
- /admin/logout
- /admin/register
- /admin/codeLogin
- /**/login/**
- /**/send_code/**
- /**/nologin/**
- /**/test/**
2.1.4 编写bootstrap.yml
bootstrap.yml:
yaml
server:
port: 18080
spring:
application:
name: gateway
profiles:
active: ${RUN_ENV}
main:
web-application-type: reactive
# allow-bean-definition-overriding: true
cloud:
nacos:
discovery:
username: nacos
password: bite@123
namespace: frameworkjava-${RUN_ENV}
server-addr: ${NACOS_ADDR}
config:
username: nacos
password: bite@123
namespace: frameworkjava-${RUN_ENV}
server-addr: ${NACOS_ADDR}
file-extension: yaml
logging:
pattern:
console: '[%thread] %-5level %logger{36} - %msg%n'
2.2 启动 gateway 网关服务
注:
不要忘记加环境变量不然找不到nacos的配置,服务会启动失败

打开 nacos 查看结果

gateway 服务实现成功
END
写给自己的学习笔记