版本說明
- 代碼倉庫地址點擊這里
- SpringCloud版本采用目前第二排的
Hoxton.SR10版本:

- SpringBoot版本采用
Hoxton.SR10版本的SpringCloud所支持的2.3.8.RELEASE:

- JDKheMaven采用
SpringBoot2.3.8.RELEASE所推薦的 JDK8和Maven3.5.4(3.3+)

- 附贈
SpringCloud-Hoxton.SR10和SpringBoot2.3.8.RELEASE官方PDF檔案 - 本人博客當中有 JDK8 安裝 、 MySQL5.7安裝、SpringBoot專案搭建等,點擊頭像進入主頁查看
- 本次是由兩個微服務分別是訂單和支付微服務,由網關gateway經行路由
開發步驟
首先我們先來搭建一個聚合專案也就是一個空到只有 pom.xml 檔案的maven專案,pom.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>
<!-- GAV 坐標 -->
<groupId>code.xiaohh</groupId>
<artifactId>cloud-alibaba-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包方式 -->
<packaging>pom</packaging>
<properties>
<!-- Maven 專案屬性 -->
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 統一依賴管理 -->
<spring.boot.version>2.3.8.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR10</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.5.RELEASE</spring.cloud.alibaba.version>
<mybatisplus.version>3.4.2</mybatisplus.version>
<lombok.version>1.18.18</lombok.version>
</properties>
<!-- 統一依賴管理 -->
<dependencyManagement>
<dependencies>
<!-- SpringBoot 相關依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringCloud相關依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- cloud alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.version}</version>
<exclusions>
<exclusion>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- lombok 相關依賴 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
然后建立一個 cloud-alibaba-common 模塊作為一個統一類的管理:

然后接下來的步驟和創建maven專案一樣,其中pom.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">
<parent>
<artifactId>cloud-alibaba-demo</artifactId>
<groupId>code.xiaohh</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-alibaba-common</artifactId>
<!-- 打包方式 -->
<packaging>jar</packaging>
<properties>
<!-- Maven 專案屬性 -->
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- mybatis plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!-- commons lang -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
</project>
其中的代碼都是一些公用的工具類,因為不想讓檔案過于臃腫,待會會提交到git倉庫

創建 cloud-alibaba-payment 支付模塊,pom.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">
<parent>
<artifactId>cloud-alibaba-demo</artifactId>
<groupId>code.xiaohh</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-alibaba-payment</artifactId>
<!-- 打包方式 -->
<packaging>jar</packaging>
<properties>
<!-- Maven 專案屬性 -->
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 共有依賴 -->
<dependency>
<groupId>code.xiaohh</groupId>
<artifactId>cloud-alibaba-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- SpringMVC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 健康檢查 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- nacos 注冊中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- SpringBoot 專案編譯成可執行 jar 包的插件 -->
<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>
bootstrap.yml:
spring:
cloud:
nacos:
discovery: # 注冊中心
server-addr: 192.168.1.230:8848 #請更換成自己的nacos地址
config: # 配置中心
server-addr: 192.168.1.230:8848 #請更換成自己的nacos地址
file-extension: yml # 配置中心檔案的后綴
application.yml:
server:
port: 2020 # 服務器埠號
spring:
application:
name: cloud-alibaba-payment # 應用名,也就是注冊到注冊中心的名字
datasource: # 資料庫配置
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.230:3306/cloud_payment?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root
profiles:
active: dev # 當前處于開發環境
mybatis-plus: # mybatis plus 配置
mapper-locations: classpath:mapper/payment/*.xml # mapper 檔案配置
type-aliases-package: code.xiaohh.cloudalibaba.common.entities # entities 的別名都在哪個包下
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 設定列印SQL陳述句
PaymentApplication.java:
package code.xiaohh.cloudalibaba.payment;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* <p>
* 支付模塊啟動類
* </p>
*
* @author XiaoHH
* @version 1.0
* @date 2021-04-10 星期六 14:53:51
* @file PaymentApplication.java
*/
@EnableDiscoveryClient // 啟用注冊中心
@EnableFeignClients(basePackages = "code.xiaohh.cloudalibaba.common.feigns") // 啟用遠程呼叫
@SpringBootApplication
public class PaymentApplication {
public static void main(String[] args) {
// 啟動支付模塊
SpringApplication.run(PaymentApplication.class, args);
System.out.println("^V^ 支付模塊啟動成功 ^V^\n" +
"/-\\ /-\\ /-\\ /-\\ /-\\ /-\\\n" +
" X i a o H H\n" +
"\\-/ \\-/ \\-/ \\-/ \\-/ \\-/");
}
}
payment資料庫建庫建表陳述句:
DROP DATABASE IF EXISTS `cloud_payment`;
CREATE DATABASE `cloud_payment`;
USE `cloud_payment`;
CREATE TABLE `payment` (
`payment_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '支付id',
`serial` VARCHAR(50) NOT NULL COMMENT '支付流水號'
) COMMENT '支付表';
接下來的代碼我們用 renren-generator 的代碼生成器生成以下,其實也就是SpringBoot的SSM專案的代碼,可以查看我的文章SpringBoot搭建SSM專案,點擊這里下載代碼生成器,代碼生成器步驟請自己去看人家的官方微信,首先添加在資料庫當中添加一條資料看看效果:

添加成功,SQL陳述句也成功發送:

資料庫當中:

同時我們生成訂單模塊的微服務,代碼基本上相同,不同的地方:
application.yml資料庫連接的url配置和應用名埠號(僅僅只列出了不同的地方):
server:
port: 2030 # 服務器埠號
spring:
application:
name: cloud-alibaba-order # 應用名,也就是注冊到注冊中心的名字
datasource:
url: jdbc:mysql://192.168.1.230:3306/cloud_order?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
order資料庫建庫建表陳述句:
DROP DATABASE IF EXISTS `cloud_order`;
CREATE DATABASE `cloud_order`;
USE `cloud_order`;
CREATE TABLE `order` (
`order_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '訂單id',
`order_number` VARCHAR(50) NOT NULL COMMENT '訂單號'
) COMMENT '訂單表';
同樣用代碼生成器生成代碼,然后我們來到nacos服務串列,可以看到nacos服務注冊是成功的

然后我們來試試注冊中心,注冊中心配置讀取的規則如下:
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
# 應用名-當前環境.配置中心檔案的后綴
那么根據 bootstrap.yml 和 application.yml 的配置則:
cloud-alibaba-order模塊的配置名為cloud-alibaba-order-dev.ymlcloud-alibaba-payment模塊的配置名為cloud-alibaba-payment-dev.yml
現在去nacos配置中心添加配置:
訂單服務配置:

支付模塊配置:

查看配置號的配置

重啟之后可以發現兩個服務分別在 8080 和 8090 啟動成功

根據SpringCloud的架構圖我們還需要一個服務網關來路由將請求推送到指定服務:

我們再建立一個 cloud-alibaba-gateway 來作為服務網關
pom.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">
<parent>
<artifactId>cloud-alibaba-demo</artifactId>
<groupId>code.xiaohh</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-alibaba-gateway</artifactId>
<!-- 打包方式 -->
<packaging>jar</packaging>
<properties>
<!-- Maven 專案屬性 -->
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</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>
<!-- nacos 注冊中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- SpringBoot 專案編譯成可執行 jar 包的插件 -->
<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>
bootstrap.yml:
spring:
cloud:
nacos:
discovery: # 注冊中心
server-addr: 192.168.1.230:8848 #請更換成自己的nacos地址
config: # 配置中心
server-addr: 192.168.1.230:8848 #請更換成自己的nacos地址
file-extension: yml # 配置中心檔案的后綴
application.yml:
server:
port: 80 # 服務器埠號
spring:
application:
name: cloud-alibaba-gateway # 應用名,也就是注冊到注冊中心的名字
profiles:
active: dev # 當前處于開發環境
cloud:
gateway: # 網關配置
routes: # 路由配置
# 訂單服務的路由
- id: cloud-alibaba-order-route # 單個路由的id
uri: lb://cloud-alibaba-order # 路由條件滿足后跳轉到這個服務
predicates:
- Path=/api/order/** # 斷言,當請求url滿足這個路徑要求時路由
filters:
- RewritePath=/api/(?<segment>.*),/$\{segment} # 路徑重寫,確保不會404
#支付服務的路由
- id: cloud-alibaba-payment-route # 單個路由的id
uri: lb://cloud-alibaba-payment # 路由條件滿足后跳轉到這個服務
predicates:
- Path=/api/payment/** # 斷言,當請求url滿足這個路徑要求時路由
filters:
- RewritePath=/api/(?<segment>.*),/$\{segment} # 路徑重寫,確保不會404
GatewayApplication.java:
package code.xiaohh.cloudalibaba.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* <p>
* 網關模塊啟動類
* </p>
*
* @author XiaoHH
* @version 1.0
* @date 2021-04-10 星期六 16:42:08
* @file GatewayApplication.java
*/
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
// 啟動網關模塊
SpringApplication.run(GatewayApplication.class, args);
System.out.println("^V^ 網關模塊啟動成功 ^V^\n" +
"/-\\ /-\\ /-\\ /-\\ /-\\ /-\\\n" +
" X i a o H H\n" +
"\\-/ \\-/ \\-/ \\-/ \\-/ \\-/");
}
}
好的,網關配置好了,現在我們來測驗以下:
根據路徑重寫規則發送獲取訂單id為1的請求:
http://127.0.0.1/api/order/order/info/1

可以看到請求的是網關的80埠,并且轉發到訂單服務了,訂單服務列印SQL陳述句:

再來測驗支付模塊:
http://127.0.0.1/api/payment/payment/info/1
同樣請求成功:

支付同樣的也列印了SQL陳述句:

微服務框架的搭建就告一段落了,其他介面自行測驗哦!代碼已經提交git倉庫
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/275128.html
標籤:其他
上一篇:藍橋杯賽題(更新中)
