ソリューションの開発

このソリューションの各部分はJavaで実装されており、POMファイルで定義されているように、Mavenを使用して必要な依存関係を取得します。コードをコンパイルおよび実行するためにMavenを起動してアプリケーションを実行する単純なシェル・スクリプトが含まれています。

スクリプトを実行する前に、各ケースでEnvironmentクラスを変更して、適切な接続詳細(キューOCID、デプロイメント・リージョンなど)を定義する必要があります。関数およびマイクロサービスの場合、コードはコンテナ内で実行されるため、追加のステップが必要です。リポジトリのreadmeには、コンテナ内のJARをラップするために必要なステップが示されています。デプロイメントの前に、ファンクションとOKEでホストされるマイクロサービスの両方の実行可能アーティファクトは、コンテナ・レジストリ(OCIR)にあります。

プロデューサ・コードの調整

プロデューサの実装(com.demo.samples.basic.QueueProducer)は非常にシンプルで、mainメソッドと、メッセージ・コンテンツの作成に役立つ2つの追加メソッドで構成されています。mainメソッドは、接続オブジェクトおよび転送オブジェクトを構築し、新しいメッセージを作成して送信する無限ループに入ります。ペイロードを調整するには、prepareMessageの変更のみが必要です。現在、このメソッドはGUIDを含む単純なメッセージを作成し、APIが一度に20個のメッセージを送信できるという事実を利用します。

コンシューマ・コードの調整

コンシューマ(com.demo.consumer.QueueConsumer)は、OKE構成からプッシュされた環境変数から構成を取得します。これにより、コンシューマを異なるキューに簡単に再構成できます。作業の大部分は、mainメソッドで実行されます。このメソッドには、キュー接続があると、メッセージのリクエストが実行されます。prepareGetMessageRequestというヘルパー・メソッドは、メッセージ・リクエスト自体を作成します。このメソッドは、特定のキューを識別し、prepareGetMessageRequestonがレスポンスを待機する期間(長いポーリングを構成可能)と、返されるメッセージの最大数(最大20)を設定します。
メッセージが取得されると、processMessageメソッドによって処理されます。

ノート:

このプレイブックでは、プロセスは単にスリープ状態になりますが、実際のアプリケーションでメッセージの処理に時間がかかる可能性があることを理解する必要があります。
processMessageメソッドがスレッド・スリープを適用してバックエンド・メッセージ処理ワークロードをシミュレートするため、スケーリング・メカニズムが機能します。受信したすべてのメッセージが処理されると、キューから削除するように指示されます。

キュー長機能コードの調整

Queue length関数には、OCIファンクションの動作方法に準拠した方法で実装されるQueueLength (パッケージcom.example.fn)というクラスが含まれています。次に、別のクラスGetStatsを使用します。このクラスでは、OCIファンクションの構成によって注入された環境変数を使用してキューに接続し、統計をリクエストします。結果はRESTレスポンスから取得され、JSON構造で返されます。

Functionの外部で実行される垂直スケーリングのシンプルさと決定を考慮して、このコードを変更する必要はありません。

スケーリングを制御するための設定の構成

ソリューションがキューに接続できるようにプロバイダ、コンシューマおよびファンクションのパラメータを構成するだけでなく、KEDAを使用して実装されるスケーリングを制御するための設定を構成する必要があります。 これは、kubectlを使用してOKEに送信する必要があるso-object.yamlで確認できます(すべてのコマンドは、リポジトリ内の関連するreadmeファイルに提供されます)。

この構成には、KEDAがAPIゲートウェイへのコールをトリガーする必要がある頻度、許可されるターゲット・サービス・インスタンスの数とターゲットの名前に関する境界が記載されています。構成には、現在の需要を取得するために起動するURLを示すトリガー定義と、決定のためにKEDAに返されたJSONオブジェクトへのパスを含め、インスタンスがスケール・アップまたはスケール・ダウンできるしきい値も含まれます。