工作流程叢集支援整合阿里雲輕量訊息佇列(原 MNS),利用輕量訊息佇列(原 MNS)作為中介接入豐富的事件來源,利用事件驅動觸發工作流程運行。當有新的事件觸發(如OSS事件觸發、EventBridge事件觸發)時,輕量訊息佇列(原 MNS)會收到相應的訊息,Argo會根據事件觸發的條件自動觸發工作流程的運行,實現自動化的工作流程處理。
前提條件
-
已開通以下服務與功能。
-
開通輕量訊息佇列(原 MNS)並授權,該功能會涉及輕量訊息佇列(原 MNS)相關計費,具體收費情況,請參見計費說明。
-
已建立工作流程叢集並下載阿里雲Argo CLI。
步驟一:建立Event Bus
Event Bus可以被命名空間中的事件驅動工作流程共用,您可以通過NATS和輕量訊息佇列(原 MNS)兩種方式建立,如果已經建立,請直接執行步驟二:建立Event Source。
通過NATS建立
-
建立
event-bus.yaml檔案。Event Bus範例程式碼如下所示:apiVersion: argoproj.io/v1alpha1 kind: EventBus metadata: name: default spec: nats: native: replicas: 3 auth: token -
執行以下命令,建立EventBus。
kubectl apply -f event-bus.yaml說明命令執行成功後,會在default命名空間下建立Event Bus Pod。後續操作需在同一命名空間下。
-
執行以下命令,查看Event Bus Pod是否正常啟動。
kubectl get pod
通過輕量訊息佇列(原 MNS)建立
-
在主題列表頁面建立主題argoeventbus,並在主題詳情頁面的存取點地區擷取Endpoint。
使用Resource Access Management員登入RAM控制台。
-
建立RAM使用者,為RAM使用者授予
AliyunMNSFullAccess許可權,並擷取RAM使用者的AK和SK。具體操作,請參見建立RAM使用者、管理RAM使用者的許可權、建立AccessKey和查看RAM使用者的AccessKey資訊。
-
執行以下命令,建立Secret用於儲存AK和SK。
kubectl create secret generic mns-secret\ --from-literal=accesskey=*** \ --from-literal=secretkey=*** -
建立
event-bus-mns.yaml檔案,將樣本中的參數修改為實際使用的參數值。apiVersion: argoproj.io/v1alpha1 kind: EventBus metadata: name: default spec: alimns: accessKey: key: accesskey name: mns-secret secretKey: key: secretkey name: mns-secret topic: argoeventbus # 對應輕量訊息佇列(原 MNS)中的主題名稱。 endpoint: http://165***368.mns.<region>.aliyuncs.com # 對應輕量訊息佇列(原 MNS)的Endpoint。 -
執行以下命令,應用
event-bus-mns.yaml檔案建立Event Bus資源。kubectl apply -f event-bus-mns.yaml
步驟二:建立Event Source
-
在队列列表頁面建立隊列test-event-queue,並在队列详情頁面的存取點地區擷取Endpoint。
說明若您是通過輕量訊息佇列(原 MNS)建立的Event Bus,則步驟3~步驟5可直接跳過,直接執行步驟6。
使用Resource Access Management員登入RAM控制台。
-
建立RAM使用者,為RAM使用者授予
AliyunMNSFullAccess許可權,並擷取RAM使用者的AK和SK。具體操作,請參見建立RAM使用者、管理RAM使用者的許可權、建立AccessKey和查看RAM使用者的AccessKey資訊。
-
執行以下命令,建立Secret用於儲存AK和SK。
kubectl create secret generic mns-secret\ --from-literal=accesskey=*** \ --from-literal=secretkey=*** -
建立
event-source.yaml檔案,將樣本中的參數修改為實際使用的參數值。apiVersion: argoproj.io/v1alpha1 kind: EventSource metadata: name: ali-mns spec: mns: example: jsonBody: true accessKey: key: accesskey name: mns-secret secretKey: key: secretkey name: mns-secret queue: test-event-queue # 對應輕量訊息佇列(原 MNS)中的隊列名稱。 waitTimeSeconds: 20 endpoint: http://165***368.mns.<region>.aliyuncs.com # 對應輕量訊息佇列(原 MNS)的Endpoint。 -
執行以下命令,應用
event-source.yaml檔案建立Event Source。kubectl apply -f event-source.yaml -
執行以下命令,查看Event Source Pod是否正常啟動。
kubectl get pod
步驟三:建立Event Sensor
-
建立
event-sensor.yaml檔案,在Event Sensor中嵌入待執行的工作流程定義。Event Sensor範例程式碼: -
應用
event-sensor.yaml檔案建立Event Sensor。kubectl apply -f event-sensor.yaml -
查看Event Sensor Pod是否正常啟動。
kubectl get pod
通過輕量訊息佇列(原 MNS)建立Eventbus時,在Event Sensor建立完成後,會自動建立一個輕量訊息佇列(原 MNS)與之對應,隊列命名格式為:ackone-argowf-<namespace>-<sensor-name>-<sensor-uid>。
步驟四:驗證通過向輕量訊息佇列(原 MNS)發送訊息觸發工作流程
-
在队列列表頁面中,找到隊列test-event-queue,在其操作列單擊收发消息。
-
在收發訊息快速體驗頁面中,輸入訊息內容
test trigger argo workflow,然後單擊发送消息。 -
在工作流程叢集中查看工作流程的運行情況。
argo list預期輸出如下:
NAME STATUS AGE DURATION PRIORITY ali-mns-workflow-5prz7 Running 6s 6s 0 -
擷取工作流程日誌,查看訊息內容。
argo logs ali-mns-workflow-5prz7重要-
該命令中的工作流程名稱必須和上一步驟中返回的工作流程名稱一致,
ali-mns-workflow-5prz7僅為樣本值,請您修改為實際環境中的傳回值。 -
訊息內容使用Base64編碼。
預期輸出如下:
ali-mns-workflow-5prz7-whalesay-2429203954: time="2023-12-14T08:33:37.964Z" level=info msg="capturing logs" argo=true ali-mns-workflow-5prz7-whalesay-2429203954: ali-mns-workflow-5prz7-whalesay-2429203954: < dGVzdCB0cmlnZ2VyIGFyZ28gd29ya2Zsb3c= > ali-mns-workflow-5prz7-whalesay-2429203954: ----------------------------------------- ali-mns-workflow-5prz7-whalesay-2429203954: \ ali-mns-workflow-5prz7-whalesay-2429203954: \ ali-mns-workflow-5prz7-whalesay-2429203954: \ ali-mns-workflow-5prz7-whalesay-2429203954: ## . ali-mns-workflow-5prz7-whalesay-2429203954: ## ## ## == ali-mns-workflow-5prz7-whalesay-2429203954: ## ## ## ## === ali-mns-workflow-5prz7-whalesay-2429203954: /""""""""""""""""___/ === ali-mns-workflow-5prz7-whalesay-2429203954: ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ ali-mns-workflow-5prz7-whalesay-2429203954: \______ o __/ ali-mns-workflow-5prz7-whalesay-2429203954: \ \ __/ ali-mns-workflow-5prz7-whalesay-2429203954: \____\______/ ali-mns-workflow-5prz7-whalesay-2429203954: time="2023-12-14T08:33:38.979Z" level=info msg="sub-process exited" argo=true error="<nil>" -
步驟五:清除Event相關資源
-
清除相關資源。
-
清除Event Sensor
kubectl delete sensor ali-mns -
清除Event Source
kubectl delete eventsource ali-mns -
清除Event Bus
kubectl delete eventbus default
-
-
查看Pod狀態,確認所有資源已清除。
kubectl get pod