通過輕量消息隊(duì)列(原 MNS)觸發(fā)工作流
工作流集群支持集成阿里云輕量消息隊(duì)列(原 MNS),利用輕量消息隊(duì)列(原 MNS)作為中介接入豐富的事件源,利用事件驅(qū)動(dòng)觸發(fā)工作流運(yùn)行。當(dāng)有新的事件觸發(fā)(如OSS事件觸發(fā)、EventBridge事件觸發(fā))時(shí),輕量消息隊(duì)列(原 MNS)會(huì)收到相應(yīng)的消息,Argo會(huì)根據(jù)事件觸發(fā)的條件自動(dòng)觸發(fā)工作流的運(yùn)行,實(shí)現(xiàn)自動(dòng)化的工作流處理。
前提條件
已開通以下服務(wù)與功能
開通輕量消息隊(duì)列(原 MNS)并授權(quán),該功能會(huì)涉及輕量消息隊(duì)列(原 MNS)相關(guān)計(jì)費(fèi),具體收費(fèi)情況,請(qǐng)參見計(jì)費(fèi)說明。
已創(chuàng)建工作流集群并下載阿里云Argo CLI。
步驟一:創(chuàng)建Event Bus
Event Bus可以被命名空間中的事件驅(qū)動(dòng)工作流共享,您可以通過NATS和輕量消息隊(duì)列(原 MNS)兩種方式創(chuàng)建,如果已經(jīng)創(chuàng)建,請(qǐng)直接執(zhí)行步驟二:創(chuàng)建Event Source。
通過NATS創(chuàng)建
創(chuàng)建
event-bus.yaml
文件。Event Bus示例代碼如下所示:apiVersion: argoproj.io/v1alpha1 kind: EventBus metadata: name: default spec: nats: native: replicas: 3 auth: token
執(zhí)行以下命令,創(chuàng)建EventBus。
kubectl apply -f event-bus.yaml
說明命令執(zhí)行成功后,會(huì)在default命名空間下創(chuàng)建Event Bus Pod。后續(xù)操作需在同一命名空間下。
執(zhí)行以下命令,查看Event Bus Pod是否正常啟動(dòng)。
kubectl get pod
通過輕量消息隊(duì)列(原 MNS)創(chuàng)建
在主題列表頁(yè)面創(chuàng)建主題argoeventbus,并在主題詳情頁(yè)面的接入點(diǎn)區(qū)域獲取Endpoint。
使用RAM管理員登錄RAM控制臺(tái)。
創(chuàng)建RAM用戶,為RAM用戶授予
AliyunMNSFullAccess
權(quán)限,并獲取RAM用戶的AK和SK。具體操作,請(qǐng)參見創(chuàng)建RAM用戶、為RAM用戶授權(quán)、創(chuàng)建AccessKey和查看RAM用戶的AccessKey信息。
執(zhí)行以下命令,創(chuàng)建Secret用于存儲(chǔ)AK和SK。
kubectl create secret generic mns-secret\ --from-literal=accesskey=*** \ --from-literal=secretkey=***
創(chuàng)建
event-bus-mns.yaml
文件,將示例中的參數(shù)修改為實(shí)際使用的參數(shù)值。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 # 對(duì)應(yīng)輕量消息隊(duì)列(原 MNS)中的主題名稱。 endpoint: http://165***368.mns.<region>.aliyuncs.com # 對(duì)應(yīng)輕量消息隊(duì)列(原 MNS)的Endpoint。
執(zhí)行以下命令,應(yīng)用
event-bus-mns.yaml
文件創(chuàng)建Event Bus資源。kubectl apply -f event-bus-mns.yaml
步驟二:創(chuàng)建Event Source
在隊(duì)列列表頁(yè)面創(chuàng)建隊(duì)列test-event-queue,并在隊(duì)列詳情頁(yè)面的接入點(diǎn)區(qū)域獲取Endpoint。
說明若您是通過輕量消息隊(duì)列(原 MNS)創(chuàng)建的Event Bus,則步驟3~步驟5可直接跳過,直接執(zhí)行步驟6。
使用RAM管理員登錄RAM控制臺(tái)。
創(chuàng)建RAM用戶,為RAM用戶授予
AliyunMNSFullAccess
權(quán)限,并獲取RAM用戶的AK和SK。具體操作,請(qǐng)參見創(chuàng)建RAM用戶、為RAM用戶授權(quán)、創(chuàng)建AccessKey和查看RAM用戶的AccessKey信息。
執(zhí)行以下命令,創(chuàng)建Secret用于存儲(chǔ)AK和SK。
kubectl create secret generic mns-secret\ --from-literal=accesskey=*** \ --from-literal=secretkey=***
創(chuàng)建
event-source.yaml
文件,將示例中的參數(shù)修改為實(shí)際使用的參數(shù)值。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 # 對(duì)應(yīng)輕量消息隊(duì)列(原 MNS)中的隊(duì)列名稱。 waitTimeSeconds: 20 endpoint: http://165***368.mns.<region>.aliyuncs.com # 對(duì)應(yīng)輕量消息隊(duì)列(原 MNS)的Endpoint。
執(zhí)行以下命令,應(yīng)用
event-source.yaml
文件創(chuàng)建Event Source。kubectl apply -f event-source.yaml
執(zhí)行以下命令,查看Event Source Pod是否正常啟動(dòng)。
kubectl get pod
步驟三:創(chuàng)建Event Sensor
創(chuàng)建
event-sensor.yaml
文件,在Event Sensor中嵌入待執(zhí)行的工作流定義。Event Sensor示例代碼如下所示:執(zhí)行以下命令,應(yīng)用
event-sensor.yaml
文件創(chuàng)建Event Sensor。kubectl apply -f event-sensor.yaml
執(zhí)行以下命令,查看Event Sensor Pod是否正常啟動(dòng)。
kubectl get pod
通過輕量消息隊(duì)列(原 MNS)創(chuàng)建Eventbus時(shí),在Event Sensor創(chuàng)建完成后,會(huì)自動(dòng)創(chuàng)建一個(gè)輕量消息隊(duì)列(原 MNS)與之對(duì)應(yīng),隊(duì)列命名格式為:ackone-argowf-<namespace>-<sensor-name>-<sensor-uid>。
步驟四:驗(yàn)證通過向輕量消息隊(duì)列(原 MNS)發(fā)送消息觸發(fā)工作流
在隊(duì)列列表頁(yè)面中,找到隊(duì)列test-event-queue,在其操作列選擇
。在收發(fā)消息快速體驗(yàn)頁(yè)面中,輸入消息內(nèi)容
test trigger argo workflow
,然后單擊發(fā)送消息。執(zhí)行以下命令,在工作流集群中查看工作流的運(yùn)行情況。
argo list
預(yù)期輸出如下:
NAME STATUS AGE DURATION PRIORITY ali-mns-workflow-5prz7 Running 6s 6s 0
獲取工作流日志,查看消息內(nèi)容。
argo logs ali-mns-workflow-5prz7
重要該命令中的工作流名稱必須和上一步驟中返回的工作流名稱一致,
ali-mns-workflow-5prz7
僅為示例值,請(qǐng)您修改為實(shí)際環(huán)境中的返回值。消息內(nèi)容使用Base64編碼。
預(yù)期輸出如下:
步驟五:清除Event相關(guān)資源
執(zhí)行以下命令清除相關(guān)資源。
清除Event Sensor
kubectl delete sensor ali-mns
清除Event Source
kubectl delete eventsource ali-mns
清除Event Bus
kubectl delete eventbus default
執(zhí)行以下命令查看Pod狀態(tài),確認(rèn)所有資源已清除。
kubectl get pod