iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 20
0
Microsoft Azure

Azure 的奇幻之旅系列 第 20

Azure 系列文(20) - Azure Spring Cloud - PiggyMetrics

上一篇我們介紹到了Azure Spring Cloud的部署方式,可是上面只有單個服務的部署,那我們如果要使用微服務的架構部署該怎麼辦呢?不同的Micro-service之間又是怎麼溝通的呢,前一篇講到Azure Spring Cloud,看來逃不掉介紹微服務了,今天只好把這個坑填起來了XD

準備

  • Azure 帳號
  • Git
  • VScode

下載範例程式碼

這篇用的範例是PiggyMetrics

git clone https://github.com/sqshq/piggymetrics.git

接下來將下面的bash script填上自己的資訊並且儲存為setup.sh

setup.sh

# Azure
export RESOURCE_GROUP=INSERT-your-resource-group-name
export REGION=eastus
export SPRING_CLOUD_SERVICE=INSERT-your-spring-cloud-service-name

# Mongo DB
export MONGODB_DATABASE=INSERT-your-mongodb-database-name
export MONGODB_USER=INSERT-your-cosmosdb-account-name
export MONGODB_URI="INSERT-your-mongodb-connection-string"
export MONGODB_RESOURCE_ID=INSERT-your-mongodb-resource-id

# Rabbit MQ
export RABBITMQ_RESOURCE_GROUP=INSERT-your-rabbitmq-resource-group-name
export VM_NAME=INSERT-your-rabbitmq-virtual-machine-name
export ADMIN_USERNAME=INSERT-your-rabbitmq-admin-user-name

export RABBITMQ_HOST=INSERT-your-rabbitmq-host-public-ip-address
export RABBITMQ_PORT=5672
export RABBITMQ_USERNAME=INSERT-your-rabbitmq-username
export RABBITMQ_PASSWORD=INSERT-your-rabbitmq-password

讓export生效

source setup.sh

建立Spring Cloud

登入azure

az login

安裝Spring Cloud Extension

az extension add --name spring-cloud

再來建立一個資源群組

az group create --name ${RESOURCE_GROUP} \
    --location ${REGION}

建立 Spring Cloud 資源

az spring-cloud create --name ${SPRING_CLOUD_SERVICE} \
    --resource-group ${RESOURCE_GROUP} \
    --location ${REGION}

因為再來有一長串指令,所以可以先設定預設的Resource Group

az configure --defaults \
    group=${RESOURCE_GROUP} \
    location=${REGION} \
    spring-cloud=${SPRING_CLOUD_SERVICE}

部署Spring Cloud

首先,先創建Gateway的instance

az spring-cloud app create --name gateway --instance-count 1 --is-public true

回傳的部分可以看到一個URL,打開之後就會發現有一個Spring Cloud的畫面了
https://ithelp.ithome.com.tw/upload/images/20200929/20127994ZbK1mLFVIP.png

再來可以把其他的instance也都建立好

az spring-cloud app create --name account-service --instance-count 1
az spring-cloud app create --name auth-service --instance-count 1
az spring-cloud app create --name statistics-service --instance-count 1
az spring-cloud app create --name notification-service --instance-count 1

再來Build出Jar檔

mvn clean package -DskipTests -Denv=cloud

接著把全部服務都部署上Azure

az spring-cloud app deploy --name gateway \
    --jar-path ./gateway/target/gateway-1.0-SNAPSHOT.jar

az spring-cloud app deploy --name account-service \
    --jar-path  ./account-service/target/account-service-1.0-SNAPSHOT.jar \
    --env MONGODB_DATABASE=${MONGODB_DATABASE} \
          MONGODB_URI=${MONGODB_URI} \
          RABBITMQ_HOST=${RABBITMQ_HOST} \
          RABBITMQ_PORT=${RABBITMQ_PORT} \
          RABBITMQ_USERNAME=${RABBITMQ_USERNAME} \
          RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}
          
az spring-cloud app deploy --name auth-service \
    --jar-path ./auth-service/target/account-service-1.0-SNAPSHOT.jar \ \
    --env MONGODB_DATABASE=${MONGODB_DATABASE} \
          MONGODB_URI=${MONGODB_URI}
          
az spring-cloud app deploy --name statistics-service \
    --jar-path ./statistics-service/target/statistics-service-1.0-SNAPSHOT.jar \ \
    --env MONGODB_DATABASE=${MONGODB_DATABASE} \
          MONGODB_URI=${MONGODB_URI} \
          RABBITMQ_HOST=${RABBITMQ_HOST} \
          RABBITMQ_PORT=${RABBITMQ_PORT} \
          RABBITMQ_USERNAME=${RABBITMQ_USERNAME} \
          RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}

az spring-cloud app deploy --name notification-service \
    --jar-path ./notification-service/target/notification-service-1.0-SNAPSHOT.jar \ \
    --env MONGODB_DATABASE=${MONGODB_DATABASE} \
          MONGODB_URI=${MONGODB_URI} \
          RABBITMQ_HOST=${RABBITMQ_HOST} \
          RABBITMQ_PORT=${RABBITMQ_PORT} \
          RABBITMQ_USERNAME=${RABBITMQ_USERNAME} \
          RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}

接下來只要瀏覽一樣URL就可以看到
https://ithelp.ithome.com.tw/upload/images/20200929/20127994FqNx3dbBSn.png

https://ithelp.ithome.com.tw/upload/images/20200929/20127994B6n65JpJFD.png

https://ithelp.ithome.com.tw/upload/images/20200929/20127994YRSorvdXQD.png

https://ithelp.ithome.com.tw/upload/images/20200929/20127994U7Pg9uDqop.png

經過上面漫長的步驟就可以完成把微服務架在Azure上拉~但這時候應該就會有人問,那如果我想把微服務部署到Kubernetes上呢?該怎麼辦,前陣子我也有做過這件事,但自己用起來會感覺有點奇怪,因為兩邊重疊的地方太多了,比如說: Kubernetes的ingress跟Spring Cloud的Zuul,兩個都是可以扮演API Gateway的角色,所以就會有點尷尬,因為同時也只需要一個功能就好了,不過如果有時候可以善加運用兩邊的優點,也會是個好方式!!


上一篇
Azure 系列文(19) - Azure Spring Cloud
下一篇
Azure 系列文(21) - IoT Hub 裝置註冊(連接字串)
系列文
Azure 的奇幻之旅30

尚未有邦友留言

立即登入留言