開發解決方案

這個解決方案的每個部分都已使用 Java 實行,並使用 Maven 擷取所需的相依性 (由 POM 檔案定義)。它包括一個簡單的 Shell 命令檔,透過呼叫 Maven 來編譯和執行程式碼來執行應用程式。

在執行命令檔之前,您需要修改每個案例的 Environment 類別,以定義適當的連線詳細資訊;例如,佇列 OCID、建置區域等等。對於函數與微服務,因為程式碼是在容器內執行,這需要執行一些額外步驟。儲存區域中的讀我檔案描述包裝容器內 JAR 所需的步驟。在部署之前,函數與 OKE 代管的微服務皆位於容器登錄 (OCIR) 中。

量身訂做產生器代碼

產生器實行 (com.demo.samples.basic.QueueProducer) 非常簡單,由 main 方法與兩個額外方法組成,可用來協助產生訊息內容。main 方法會建立連線與傳輸物件,然後進入無限迴圈,以建立新訊息並加以傳送。若要修改有效負載 (Payload) 方法,您只需修改 prepareMessage。目前,這個方法會建立一個具有 GUID 的簡單訊息,然後利用 OCI Queue 讓 API 一次傳送 20 則訊息。

量身打造消費者代碼

用戶 (com.demo.consumer.QueueConsumer) 可從 OKE 組態的環境變數中植入其組態。這樣可以將用戶重新設定為不同的佇列非常容易。大量工作會以 main 方法執行,只要它具有佇列連線,就會執行訊息要求。呼叫 prepareGetMessageRequest 的協助程式方法會建立訊息要求本身。此方法可識別特定佇列,並設定持續時間 prepareGetMessageRequeston 將等待回應 (允許您設定長期輪詢) 以及可傳回的訊息數目上限 (最多 20)。
擷取訊息之後,processMessage 方法就會加以處理。

注意:

在這個播放手冊中,這個處理作業只是進入睡眠模式,雖然您應該瞭解實際的應用程式可能需要一些時間來處理訊息 。
由於 processMessage 方法會套用執行緒休眠來模擬後端訊息處理工作負載,因此您會看到調整機制工作。處理所有收到的訊息後,「佇列」會被告知刪除。

量身訂做佇列長度函數代碼

佇列長度函數包含一個名為 QueueLength 的類別 (在套裝程式 com.example.fn 中),此類別會按照 OCI 函數的運作方式實行。這會接著使用個別的類別 GetStats,此類別使用 OCI 函數組態插入的環境變數來連線至佇列並要求統計資料。結果是從 REST 回應取得,並以 JSON 結構傳回。

由於簡單性與決策在函數外部執行的垂直比例,您幾乎不需要修改此程式碼。

設定可控制調整規模的設定值

除了設定「提供者」、「用戶」和「函數」參數之外,解決方案還可以連線至「佇列」,您需要設定來控制使用 KEDA 實行的調整規模。 您可以在 so-object.yaml 中看見此方法,以便使用 kubectl 傳送至 OKE (儲存庫中相關的讀我檔案會提供所有指令)。

此組態提供詳細資訊,描述 KEDA 觸發 API 閘道呼叫的頻率、允許多少目標服務執行處理的界限,以及目標的名稱。組態也包含觸發程式定義,此定義會指示呼叫以取得目前需求的 URL,以及執行處理可縱向擴展或縮減的臨界值,包括傳回 KEDA 之 JSON 物件的路徑以做出決定。