開始使用訂閱

在分散式環境中,您通常希望應用程式或工作對從其他元件 (通常稱為事件生產者) 產生的訊息 (事件) 做出反應。 透過 Code Engine,您的應用程式或工作可透過訂閱活動製作人,接收感興趣的活動。 事件資訊以 POST HTTP 請求的方式接收應用程式,並以環境變數的方式接收工作。

Code Engine 支援下列類型的事件生產者。

Cron
cron 事件生產者基於 cron,並定期產生事件。 當需要在明確定義的間隔或特定時間採取動作時,請使用 Cron 事件生產者。
IBM Cloud Object Storage
Object Storage 事件生產者會在對物件儲存體儲存區中的物件進行變更時產生事件。 例如,當物件新增至儲存區時,應用程式可以接收事件,然後根據該變更執行動作,可能耗用該新物件。
Kafka
Kafka 事件生產者會監看新訊息出現在 Kafka 實例中。 當您針對一組主題建立 Code Engine Kafka 訂閱時,您的應用程式或工作會針對出現在其中一個主題中的每一則新訊息收到個別事件。
Webhook。
您可以使用 GitHub Webhook,將事件從 GitHub 儲存庫傳送至 Code Engine 工作量。 事件會在其中一個 支援的內容類型中以 POST 要求形式傳送。 您必須使用具有公用端點的應用程式來接收 GitHub 事件; 不支援工作。 如需相關資訊,請參閱 將 GitHub 事件傳送至應用程式

如需訂閱 API 的相關資訊,請參閱 訂閱 CRD 方法

應用程式及應用程式擴充的訂閱

應用程式可以訂閱多個事件生產者,但只有一個應用程式可以從每一個訂閱接收事件。 請注意,訂閱可能會影響應用程式調整的方式。 例如,如果您預期應用程式同時接收許多事件,且處理每一個事件需要數分鐘,則您可能需要比可以快速處理每一個事件更高的最大比例值。 如需相關資訊,請參閱 配置應用程式調整大小

所有傳送至應用程式的事件都是以 HTTP 訊息的方式接收。 事件包含某些 HTTP 標頭,可協助您快速判斷事件的關鍵資訊,而無需查看事件的正文(業務邏輯)。 如需詳細資訊,請參閱 HTTP IBM Cloud Object Storage 事件傳送給應用程式的標頭範例

工作及工作執行限制的訂閱

訂閱可能會影響啟動的工作數目。 例如,如果您的工作訂閱要刪除 Object Storage 儲存區上的變更,且該儲存區已刪除,則會針對該儲存區中的每一個物件執行一個工作,且您可以快速達到 100 個工作執行的限制。 此外,您還需要考量事件所觸發之每一個工作執行的執行時期。 例如,如果事件生產者每秒觸發 10 個以上事件,且每一個工作執行大約 20 秒,則會在大約 10 秒內達到工作執行限制 100,且在完成先前啟動的工作執行之前,會失去任何後續工作執行。 只有在傳入事件數量一般較低,且特定時間內預期的事件峰值數量低到足以讓執行中工作的數量低於配額限制時,才選擇工作作為事件訂閱者目的地。 如需相關資訊,請參閱 Code Engine的限制和配額

在 10 分鐘之後,會刪除訂閱所建立的工作執行。 如需相關資訊,請參閱 我的工作執行位置?

遞送至工作的所有事件都會作為環境變數接收。 如需相關資訊,請參閱 傳送至工作之 IBM Cloud Object Storage 事件的範例環境變數

事件 meta 資料

當您建立訂閱時,Code Engine 所管理的事件已修改,以便它們遵循 CloudEvents 規格。 此規格定義一組共同屬性,可隨附於每一個事件,以提供共同的 meta 資料集。 透過查看 meta 資料,您可以快速瞭解訊息的關鍵部分,而無需剖析及瞭解整個事件有效負載。 例如,傳送至應用程式的每個事件都包含 HTTP 標頭,稱為 ce-type,表示事件的語意(或「原因」)。 資料庫中的事件可能包括 ce-typecom.example.row.deleted,指出由於資料庫中已刪除一列而產生事件。

下表列出部分索引鍵共同屬性。 每一個屬性指出它是否為送入事件上的 必要 屬性,或它是否為 選用

常見CloudEvent屬性
標頭 說明
ID 必要 屬性是事件的唯一 ID。 同一事件生產者中沒有兩個事件獲指派相同的值。
來源 這個 必要 屬性指定發生事件的環境定義。 例如,對於物件儲存體系統,此值可能是有問題物件所在的儲存區。
規格轉換 required 屬性指出事件使用的 CloudEvents 規格版本。
類型 這個 必要 屬性說明事件的類型。 例如,事件類型可能是已建立或刪除資源。
主旨 選用 屬性指出與事件相關的資源。 例如,在物件儲存體系統中,此值可能是已修改儲存區中的物件。
時間 選用 屬性是發生事件時的時間戳記。

如需屬性完整清單的相關資訊,請參閱 CloudEvents 規格

在 Code Engine 中,當事件傳送至應用程式時,CloudEvent 屬性會以 HTTP 標頭的形式出現,並以 ce- 為前綴。 當事件遞送至批次工作時,屬性會顯示為環境變數,字首為 CE_,且整個變數名稱都是大寫。

HTTP IBM Cloud Object Storage 事件發送給應用程式的標頭範例

ce-id: 3fb2c04e-a660-4640-8899-b82efb8169b6
ce-source: https://cloud.ibm.com/catalog/services/cloud-object-storage/mybucket
ce-specversion: 1.0
ce-subject: object-69-144
ce-time: 2021-08-17T20:22:02.917Z
ce-type: com.ibm.cloud.cos.document.delete

傳送至工作之 IBM Cloud Object Storage 事件的環境變數範例

CE_DATA={"bucket":"mybucket","endpoint":"","key":"Notes.rtf","notification":{"bucket_name":"mybucket","content_type":"text/rtf","event_type":"Object:Delete","format":"2.0","object_length":"4642","object_name":"Notes.rtf","request_id":"b59727ee-9c4e-446a-9261-5616f6d1283b","request_time":"2021-04-13T20:10:37.631Z"},"operation":"Object:Delete"}  
CE_ID=b59727ee-9c4e-446a-9261-5616f6d1283b  
CE_SOURCE=https://cloud.ibm.com/catalog/services/cloud-object-storage/mybucket  
CE_SPECVERSION=1.0  
CE_TIME=2021-08-17T20:22:02.917Z  
CE_TYPE=com.ibm.cloud.cos.document.delete  

建立訂閱時會發生什麼事?

依預設,subscription cron createsubscription cos createsubscription kafka create 指令會先檢查目的地應用程式或工作是否存在。 如果因為應用程式或工作不存在於專案中而導致目的地檢查失敗,則訂閱 create 的指令會傳回錯誤。 如果您想要建立訂閱而不先建立應用程式,請使用 --force 選項。 透過使用 --force 選項,指令會略過目的地檢查。 請注意,在建立目的地應用程式或工作之前,訂閱的 Ready 欄位會顯示 false。 然後,訂閱會自動移至 Ready: true 狀態。

建立訂閱之後,會反覆地輪詢訂閱狀態以驗證其就緒狀態。 依預設,此輪詢會在逾時之前持續 15 秒。 您可以使用 --wait-timeout 選項來變更指令逾時之前的時間量。 您也可以將 --no-wait 選項設為 false,以略過狀態輪詢。

您可以使用 subscription cron getsubscription cos getsubscription kafka get CLI 指令來顯示訂閱的狀態。