天天看點

Rainbond 部署SpringCloud微服務架構業務實踐

示例項目詳情

本文檔以

Pig 快速開發架構

為例,示範如何在Rainbond上部署一套完整的Spring Cloud項目。

Pig Microservice Architecture V2.1.0:

  • 基于 Spring Cloud Finchley 、Spring Security OAuth2 的RBAC權限管理系統
  • 基于資料驅動視圖的理念封裝 Element-ui,即使沒有 vue 的使用經驗也能快速上手
  • 提供對常見容器化支援 Docker、Kubernetes、Rancher2 支援
  • 提供 lambda 、stream api 、webflux 的生産實踐

子產品說明:

pig
├── pig-ui -- 前端工程[80]
├── pig-auth -- 授權服務提供[3000]
└── pig-common -- 系統公共子產品
     ├── pig-common-core -- 公共工具類核心包
     ├── pig-common-log -- 日志服務
     └── pig-common-security -- 安全工具類
├── pig-config -- 配置中心[8888]
├── pig-eureka -- 服務注冊與發現[8761]
├── pig-gateway -- Spring Cloud Gateway網關[9999]
└── pig-upms -- 通用使用者權限管理子產品
     └── pigx-upms-api -- 通用使用者權限管理系統公共api子產品
     └── pigx-upms-biz -- 通用使用者權限管理系統業務處理子產品[4000]
└── pigx-visual  -- 圖形化子產品
     ├── pigx-monitor -- Spring Boot Admin監控 [5001]
     └── pigx-codegen -- 圖形化代碼生成[5003]
     └── pigx-zipkin -- 微服務鍊路跟蹤[5002]           

上述的子產品,可以分為類庫與服務兩類,讀者可以對比自己的Spring Cloud項目:

  • 建構後産生jar包,用來實作各種功能的類的集合,即是類庫,如Pig中的

    pig-common

    子產品
  • 建構後産生jar包或者war包,通過

    java -jar

    或者tomcat等方式啟動,開放某個端口提供服務的,即是服務,如Pig中的

    pig-eureka

{{% notice note %}}

隻需要将服務子產品在Rainbond中建構出來即可。

{{% /notice %}}

經過梳理,該項目需要建構的服務元件包括:

啟動順序 服務元件名稱 運作端口 元件功能
1 pig-eureka 8761 spring cloud 服務發現注冊與發現
2 pig-config 8888 spring cloud 配置中心
3 pig-gateway 9999 spring cloud 微服務網關
4 pig-auth 3000 授權服務提供
5 pig-upms-biz 4000 通用使用者權限管理系統業務處理子產品
6 pig-monitor 5001 Spring Boot Admin監控
7 pig-codegen 5003 圖形化代碼生成
8 pig-zipkin 5002 微服務鍊路跟蹤
9 pig-ui 80 前端項目(vue項目)

部署環境說明:

部署pig,需要以下環境支援:

中間件或環境要求 版本要求 備注
JDK 1.8 強制要求版本
MySQL 5.7+
Redis 3.2 +
node 8.0 + 用于運作前端項目
npm 6.0 + 用于建構前端項目

項目連結:

子產品建構

建立應用,并命名為

spring-cloud

擷取項目克隆/下載下傳位址:

https://gitee.com/log4j/pig.git

為例,示範從源碼開始建構流程:

  • spring-cloud

    添加服務元件 —— 從源碼開始 —— 自定義倉庫:
Rainbond 部署SpringCloud微服務架構業務實踐

點選 建立服務,Rainbond會自動拉取代碼,并根據代碼根目錄下的

pom.xml

自動将代碼語言識别為

Java-maven

。取消

并建構啟動

選項:

Rainbond 部署SpringCloud微服務架構業務實踐
  • 點選 建立,進入服務元件未部署的頁面。編輯 端口 頁籤,開放

    pig-eureka

    自身端口

    8761

pig-eureka

需要被其它微服務元件通路以進行注冊,是以打開對内服務,以便之後建立依賴關系。該元件也提供web頁面,顯示微服務元件的注冊情況與健康情況,是以打開對外服務,以便外部通路。

Rainbond 部署SpringCloud微服務架構業務實踐
  • 編輯 建構源 頁籤,指定

    pig-eureka

    建構參數:

由于 Pig 本身是一個多子產品的項目,是以需要指定目前服務元件建構的子產品。指定的方式是在

建構運作環境設定

中的

Maven建構全局參數:clean dependency:list install -pl pig-eureka -am

上述的參數指定了普通的子子產品建構方式,對于另一種子子產品中的子子產品,比如

pig-codegen

子產品,參數指定的方式為:

clean dependency:list install -pl pig-visual/pig-codegen -am

在v5.1+版本的Rainbond中,可以指定目前服務元件的啟動指令。指定的方式是在

建構運作環境設定

啟動指令:web: java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app/pig-eureka/target/*.jar

,指令格式與

Procfile

一緻。

Rainbond 部署SpringCloud微服務架構業務實踐
  • 編輯 依賴 頁籤,指定目前服務元件依賴其它服務元件:

各個服務元件之間的依賴關系,可以在建立時指定。所有的 spring cloud 微服務元件都需要依賴

pig-eureka

,以

pig-gateway

為例,應添加依賴關系如下:

Rainbond 部署SpringCloud微服務架構業務實踐
  • 所有的設定完成後,即可點選 建構 ,建構完成後,服務元件将自動運作起來。
  • 将所有服務元件依次部署完成。

部署 Mysql

Pig 微服務項目需要部署 Mysql 5.7+ 作為資料源。并在代碼倉庫中提供了資料庫初始化腳本:

https://gitee.com/log4j/pig/blob/master/db/pig.sql

為了能夠在資料庫啟動時即加載初始化腳本,制作了一份

Dockerfile

:

https://github.com/dazuimao1990/percona-mysql/blob/pig/5.7/Dockerfile
FROM percona:5.7.23-stretch
LABEL creater="barnett"
ENV MYSQL_VERSION=5.7.23
ENV TZ=Asia/Shanghai
ADD docker-entrypoint.sh /run/docker-entrypoint.sh
ADD ./run/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
ADD ./run/mysqld.cnf /etc/mysql/percona-server.conf.d/mysqld.cnf
RUN fetchDeps=' \
        ca-certificates \
        wget \
    '; \
    sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list; \
    apt-get update; \
    apt-get install -y --no-install-recommends $fetchDeps; \
    rm -rf /var/lib/apt/lists/*; \
    wget -O /usr/local/bin/env2file -q https://github.com/barnettZQG/env2file/releases/download/v0.1/env2file-linux; \
    chmod +x /run/docker-entrypoint.sh && chmod +x /usr/local/bin/env2file; \
    apt-get purge -y --auto-remove $fetchDeps
EXPOSE 3306
VOLUME ["/var/lib/mysql", "/var/log/mysql"]
# 将代碼倉庫中 sql 目錄下的腳本放到對應的初始化目錄下
COPY sql/*.sql /docker-entrypoint-initdb.d/
# change ENTRYPOINT exec some custom command
ENTRYPOINT [ "/run/docker-entrypoint.sh" ]
CMD [ "mysqld" ]           
  • spring-cloud

将服務元件命名為

pig-db

,并指定代碼分支

pig

在代碼倉庫位址url的最後添加

?dir=5.7

可以讓Rainbond将建構目錄指定為代碼倉庫根目錄下的

5.7

檔案夾。
Rainbond 部署SpringCloud微服務架構業務實踐

為了讓資料庫正常工作,并且可以被其它依賴的本資料庫的應用擷取連接配接資訊,需要設定若幹環境變量:

環境變量名稱 環境變量值 設定位置
MYSQL_USER root 連接配接資訊
MYSQL_HOST 127.0.0.1
MYSQL_PORT 3306
MYSQL_ROOT_PASSWORD mysqlpassword
MYSQL_DATABASE pig

通過修改

pig-config

中的配置檔案,來定義多個微服務元件連接配接資料庫的配置:

pig/pig-config/src/main/resources/config/pigx-auth-dev.yml
pig/pig-config/src/main/resources/config/pigx-upms-dev.yml  
pig/pig-config/src/main/resources/config/pigx-codegen-dev.yml
pig/pig-config/src/main/resources/config/pigx-zipkin-dev.yml.yml           

修改示例如下:

# 資料源
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.jdbc.Driver
    username: ${MYSQL_USER}
    password: ${MYSQL_ROOT_PASSWORD}
    url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai           

部署 Redis

通過Rainbond應用市場,可以直接安裝 Redis 4.0.13。

該版本Redis預設提供連接配接資訊:

Rainbond 部署SpringCloud微服務架構業務實踐

pig-config

pig/pig-config/src/main/resources/config/application-dev.yml

來定義所有服務元件連接配接Redis的配置:

# Spring 相關
spring:
  redis:
    password: ${REDIS_PASS}
    host: ${REDIS_HOST}           

部署 pig-ui

pig-ui

是一個由nodejs語言編寫的 vue項目,作為整個系統的前端靜态頁面。Rainbond目前已經支援源碼建構

nodejs前端

項目,參考文檔:

NodeJS前端語言

為了便于改造項目,是以将項目 fork 了一份進行修改,代碼位址:

https://gitee.com/dazuimao1990/pig-ui

參照Rainbond代碼支援規範,在代碼根目錄下添加了識别檔案:

nodestatic.json

{"path":"dist"}           

并在代碼倉庫中添加了nginx配置檔案:

www/web.conf

用于處理代理轉發:

server {
    listen       80;
    root   /app/www;
    
    location ~* ^/(code|auth|admin|gen) {
        proxy_pass http://127.0.0.1:9999;
        proxy_connect_timeout 15s;
        proxy_send_timeout 15s;
        proxy_read_timeout 15s;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}           

利用這份代碼進行源碼建構,即可完成

pig-ui

服務元件的部署。

依賴與端口梳理

依賴 端口對内服務 端口對外服務
off on
pig-eureka Redis
pig-eureka pig-db Redis

最終成果

完成部署後,拓撲圖如下:

Rainbond 部署SpringCloud微服務架構業務實踐

登陸效果:

Rainbond 部署SpringCloud微服務架構業務實踐
登陸賬戶密碼:
admin
123456