目的:
初次學(xué)習(xí)Spring Cloud Alibaba,為了方便學(xué)習(xí),搭建環(huán)境并完成了一個簡單的賣票功能,主要是為了熟悉基本的組件和操作。
需求:
使用Spring Cloud Alibaba 搭建微服務(wù),完成賣票系統(tǒng)的項目構(gòu)建,您需要搭建如下微服務(wù):
1.服務(wù)注冊與發(fā)現(xiàn)(nacos):搭建Nacos注冊中心,所有的微服務(wù)都需要注冊到Nacos中
2.電影服務(wù)(movice-service):負(fù)責(zé)電影即電影票的基本CURD工作,數(shù)據(jù)庫連接 itsource-movice
3.購票服務(wù)(buyticket-service):提供購票接口,調(diào)用movice-server購買買電影票,連接數(shù)據(jù)庫itsource-buyticket
4.服務(wù)網(wǎng)關(guān):微服務(wù)的統(tǒng)一入口,使用Spring Cloud Gateway 搭建, 對movice-service和buyticket-service做請求路由
5.服務(wù)通信: buyticket-service和movice之間可能會有遠(yuǎn)程調(diào)用,使用OpenFeign來實現(xiàn)
6.服務(wù)降級:使用Sentinel組件實現(xiàn)服務(wù)降級
7.配置中心:使用Nacos作為微服務(wù)的配置中心
Spring Cloud和Spring Cloud Alibaba簡單對比

開始················
1.搭建一個Maven的父項目 ,并導(dǎo)入相關(guān)依賴
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
<alibaba.version>2.1.0.RELEASE</alibaba.version>
<spring-boot.version>2.1.13.RELEASE</spring-boot.version>
</properties>
<!--1.管理SpringBoot的依賴-->
<parent>
<groupId> org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.13.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
2.搭建電影父服務(wù) movie-server-parent

3.使用mybatis-plus生成基礎(chǔ)代碼
4.創(chuàng)建啟動類
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan("cn.hzy.hrm.mapper")
public class MovieServerApp {
public static void main(String[] args) {
SpringApplication.run(MovieServerApp.class);
}
}
導(dǎo)入依賴
<dependencies>
<!--注冊中心客戶端-->
<dependency>
<groupId>com.alibaba.cloud </groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--配置中心客戶端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--加入WEB依賴是為了方便后面寫Controller-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>cn.hzy</groupId>
<artifactId>hrm-basic-util</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-support</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>cn.hzy</groupId>
<artifactId>movie-server-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
5.啟動Nacos=====>
5.1、Nacos是什么
Nacos是一個注冊中心,相當(dāng)于SpringCloud里面中的Erueka,它也是一個配置中心,相當(dāng)于SpringCloud里面的Config,他可以將配置文件版本化管理。
5.2、開啟Nacos服務(wù)
1、 下載Nacos,下載地址:https://github.com/alibaba/nacos/releases
2、解壓后打開/bin/startup.cmd啟動

3、啟動后可打開網(wǎng)址http://127.0.0.1:8848/nacos/index.html查看主頁,用戶名密碼默認(rèn)值為nacos
6.在Nacos配置中心中進(jìn)行配置,把服務(wù)的配置文件注冊到配置中心
設(shè)置命名空間(單個項目時可以用默認(rèn)的,多個項目時可以設(shè)置)

打開Nacos監(jiān)控面板 - 進(jìn)入配置列表 -點擊 “+” 圖標(biāo)添加配置 如下:

填寫Data ID,選擇YAML,編輯配置文件內(nèi)容:

這里定義了一個名字為application-user-dev.yaml的配置,使用的是YAML格式。
server:
port: 1010
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/itsource-movie?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2b8
username: root
password: a19950116
application:
name: movie-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #注冊中心地址
mybatis-plus:
type-aliases-package: cn.hzy.hrm.domain
Data ID : 非常重要,可以看做是配置的文件的名字,在程序中拉取配置文件的時候需要指定Data ID。
Group : 分組,默認(rèn)是 DEFAULT_GROUP , 可以針對不同的項目指定不同的配置組。
6.此時電影父服務(wù) movie-server-parent已經(jīng)接入成功。啟動項目檢測
7.搭建購票服務(wù)buyticket-server-parent (同電影服務(wù),不在贅述?。?/p>
8.搭建gateway-server-1110 網(wǎng)關(guān)中心
導(dǎo)包
<dependencies>
<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-discovery</artifactId>
</dependency>
<!-- 配置中心客戶端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
創(chuàng)建啟動類
@SpringBootApplication
@EnableDiscoveryClient
public class GateWayServerApp {
public static void main(String[] args) {
SpringApplication.run(GateWayServerApp.class);
}
}
bootstrap.yml配置文件
spring:
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: localhost:8848 #注冊中心
config:
server-addr: localhost:8848 #配置中心
file-extension: yaml #配置文件格式
prefix: application-gateway #配置前綴 ,默認(rèn)使用sring.application.name
group: DEFAULT_GROUP #默認(rèn)分組
namespace: 01f747cd-14a6-4d83-9211-bba667558772 #命名空間的ID
在配置中心中創(chuàng)建配置文件application-gateway-dev.yaml
server:
port: 80
spring:
application:
name: gateway-server
cloud:
gateway:
discovery:
locator:
enabled: false #開放服務(wù)名訪問方式
lower-case-service-id: true #服務(wù)名小寫
routes:
- id : application-buyticket #指定服務(wù)名
uri: lb://buyticket-server #去注冊中心找這個服務(wù)名
predicates: #斷言,匹配訪問的路徑
- Path=/buyticket/** #服務(wù)訪問路徑
filters:
- StripPrefix=1 #請求轉(zhuǎn)發(fā)的時候會去掉
基本服務(wù)搭建完成,如何開啟熔斷,在另一篇文章SpringCloudAlibaba 限流熔斷--Sentinel 里面有詳細(xì)描述。