上一篇博客我們對SpringCloud有了一個詳細的描述,這一次我們根據上次的理念來一個落地實作,
本次只是一個簡單的集成(內容實在是太多了),后面會把每一部分單獨出一個博客詳細解釋,但都是基于此服務
SpringCloud微服務詳解(springcloud alibaba)
本篇博客的架構圖如下

文章目錄
- 一、前期準備
- 1-1、創建一個父工程
- 1-2、創建公共pom
- 二、創建一個服務提供方(用戶服務)
- 2-1、創建專案
- 2-2、修改pom
- 2-3、新增yml組態檔
- 2-4、新增啟動類檔案
- 2-5、新增用戶服務
- 2-6、測驗
- 三、注冊中心(nacos)
- 3-1、下載
- 3-2、啟動
- 3-3、用戶服務注冊進nacos
- 四、網關 (getway)
- 4-1、參照二、建立一個模塊 (getway6001)
- 4-2、添加yml檔案
- 4-3、配置pom
- 4-4、配置啟動類
- 4-5、測驗
- 4-6、其它
- 五、配置中心(nacos)
- 5-1、添加pom
- 5-2、修改組態檔
- 5-2-1、bootstrap.yml
- 5-2-2、application.yml
- 5-3、添加nacos配置
- 5-4、配置動態重繪效果
- 5-5、最終效果演示
- 六、服務監控(sentinel)
- 6-1、sentinal 控制臺
- 6-1-1、下載
- 6-1-2、登錄
- 6-2、userServer集成sentinel
- 6-2-1、添加如下pom
- 6-2-2、修改組態檔(bootstrap.yml)
- 6-2-3、userServer注冊進sentinal
- 6-2-4、服務限流
- 七、Nginx負載
- 八、源代碼/安裝包 獲取
一、前期準備
1-1、創建一個父工程



后面直接next、finish就可以了,
1-2、創建公共pom
<?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>
<groupId>www.xdx97.cloud</groupId>
<artifactId>xdxCloud</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<!-- 統一管理jar包版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<mysql.version>5.1.47</mysql.version>
<druid.version>1.1.16</druid.version>
<mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
</properties>
<!-- 子模塊繼承之后,提供作用:鎖定版本+子modlue不用寫groupId和version -->
<dependencyManagement>
<dependencies>
<!--spring boot 2.2.2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud Hoxton.SR1-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.spring.boot.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
</project>
二、創建一個服務提供方(用戶服務)
以后所有的創建方式都是如此
2-1、創建專案




2-2、修改pom
<dependencies>
<!-- SpringBoot整合Web組件 -->
<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>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2-3、新增yml組態檔
server:
port: 5001
spring:
application:
name: user_server_5001
2-4、新增啟動類檔案
package com.xdx97;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class UserServer5001 {
public static void main(String[] args) {
SpringApplication.run(UserServer5001.class, args);
}
}
2-5、新增用戶服務
package com.xdx97.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/user")
public String fun(){
return "我是用戶服務";
}
}
2-6、測驗
在瀏覽器訪問( http://127.0.0.1:5001/user ),如果可以看到結果及表示成功,
三、注冊中心(nacos)
目前就用window版本,后面會出nacos集群那時候再用linux版本
3-1、下載
https://github.com/alibaba/nacos/releases
3-2、啟動
- 把下載好的包,解壓出來
- 打開CMD去到bin目錄下,執行 startup.cmd -m standalone (standalone代表著單機模式運行,非集群模式)
- 打開瀏覽器輸入:http://127.0.0.1:8848/nacos/index.htm ,看到如下界面表示成功,
- 初始用戶名/密碼 nacos/nacos

3-3、用戶服務注冊進nacos
- 修改user服務的pom檔案,加入下面的依賴
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 修改yum檔案為如下內容
server:
port: 5001
spring:
application:
name: user_server_5001
cloud:
nacos:
discovery:
#server-addr: localhost:8848 #配置Nacos地址
server-addr: 127.0.0.1:8848
- 在啟動類上面加上服務發現注解
@EnableDiscoveryClient
- 重啟服務,然后重繪nacos會發現已經注冊進去了

四、網關 (getway)
網關里面是已經集成了服務呼叫負載均衡的
4-1、參照二、建立一個模塊 (getway6001)
4-2、添加yml檔案
這里面有一個坑,我前面的用戶服務取名為user_server_5001,這個名字配置在網關里面無法識別,所以我改成了userServer
server:
port: 6001
spring:
application:
name: getway_6001
cloud:
nacos:
discovery:
#server-addr: localhost:8848 #配置Nacos地址
server-addr: 127.0.0.1:8848
gateway:
discovery:
locator:
enabled: true #開啟從注冊中心動態創建路由的功能,利用微服務名進行路由
routes:
- id: user_server #payment_route #路由的ID,沒有固定規則但要求唯一,建議配合服務名
# uri: http://localhost:5001 #匹配后提供服務的路由地址
uri: lb://userServer #配置nacos里面的服務名
predicates:
- Path=/user/** # 斷言,路徑相匹配的進行路由
4-3、配置pom
<dependencies>
<!--gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
4-4、配置啟動類
@SpringBootApplication
@EnableDiscoveryClient
public class Getway6001 {
public static void main(String[] args) {
SpringApplication.run(Getway6001.class, args);
}
}
4-5、測驗
在瀏覽器輸入 http://localhost:6001/user 如果可以成功訪問,表示成功,
4-6、其它
本以為網關就是一個轉發,但是剛剛測驗發現還有其它好玩的東西,但是博客寫的太長不好,而且這篇博客就是簡單搭建微服務,后面會單獨寫一篇文章,
五、配置中心(nacos)
為用戶服務添加配置中心,以便可以動態的更新組態檔
5-1、添加pom
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
5-2、修改組態檔
5-2-1、bootstrap.yml
我們需要新增一個bootstrap.yml檔案,在讀取順序的時候bootstrap.yml是優先于application.yml,
server:
port: 5001
spring:
application:
name: userServer
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服務注冊中心地址
config:
server-addr: localhost:8848 #Nacos作為配置中心地址
file-extension: yaml #指定yaml格式的配置
5-2-2、application.yml
spring:
profiles:
active: dev
5-3、添加nacos配置


5-4、配置動態重繪效果
這里很關鍵,不可能說當我們去修改了nacos里面的組態檔,然后我們的系統代碼立即就收到的,他是有一個程序的,
我們要把全部的組態檔寫到一個java檔案里面,然后別的地方要用的時候去呼叫就好了,比如下面的用法:ConfigController.wxApp;
package com.xdx97.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/user")
public String fun(){
return "我是用戶服務" + ConfigController.wxApp;
}
}
我們來配置這個ConfigController,使他里面的都可以動態獲取,我這里只配置一個屬性(wx.app)作為演示,具體數量看實際需求,
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RefreshScope
@RestController
public class ConfigController {
@RequestMapping("/refreshConfig")
public String refreshConfig(){
return "配置重繪成功";
}
public static String wxApp;
@Value("${wx.app}")
public void setWxApp(String wxApp) {
this.wxApp = wxApp;
}
}
5-5、最終效果演示

六、服務監控(sentinel)
6-1、sentinal 控制臺
6-1-1、下載
https://github.com/alibaba/Sentinel/releases
下載后啟動, java -jar sentinel-dashboard-1.8.1.jar
6-1-2、登錄
訪問 http://127.0.0.1:8080 , 用戶名/密碼 sentinel / sentinel

6-2、userServer集成sentinel
6-2-1、添加如下pom
<!--SpringCloud ailibaba sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
6-2-2、修改組態檔(bootstrap.yml)
server:
port: 5001
spring:
application:
name: userServer
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服務注冊中心地址
config:
server-addr: localhost:8848 #Nacos作為配置中心地址
file-extension: yaml #指定yaml格式的配置
sentinel:
transport:
dashboard: localhost:8080
port: 8719
6-2-3、userServer注冊進sentinal
我們的sentinel是懶加載的,我們重啟userServer服務,然后訪問 http://127.0.0.1:5001/user,再重繪sentinel就可以看到如下內容

6-2-4、服務限流
sentinal 可以提供各個維度不同的限流,這里我只測驗一個最簡單的流程:當QPS大于1的時候快速失敗

七、Nginx負載
Nginx實作負載均衡Linux版本(六種負載策略)
八、源代碼/安裝包 獲取
關注微信公眾號回復: SpringCloudAlibabaDemo

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/277833.html
標籤:其他
上一篇:React框架發展史
下一篇:Redis基本概念知識
