※ 本記事は、Philip Wilkinsによる”OCI Queue with open standards“を翻訳したものです。
2023年3月28日
Oracle Cloud Infrastructure(OCI)Queueが2022年12月に発売されたとき、APIを介してすべての機能を表示できるため、使用可能なOCIネイティブ機能のデモに注力しました。製品ドキュメントでOCI APIおよびオープン・スタンダード・サポートに対応しましたが、ベンダーおよび言語に依存しないプロトコルでOCI Queueを使用する方法を示す参照可能なサンプル・コードが制限されました。ここでは、この制限事項について説明します。
Stompオープン・スタンダードによるOCI Queue
OCI Queueは、発売時から、ActiveMQやRabbitMQなどの他の多くのメッセージング製品と同様に、オープン・プロトコルStompをサポートしています。シンプル(またはストリーミング)のテキスト指向メッセージング・プロトコル(Stomp)は、成熟した実証済みのスタンダードで、サーバー実装だけでなく、幅広い言語でクライアント・ライブラリでサポートされています。Stompの実装の一部を次に示します。:
- Java: Vertx, Spring
- Python: stomp.py, stomp_ws_py
- Node.js: Stomp JS, node-stomp-client
- C/C++: ActiveMQ CMS, c-stomp, libstomp
- .Net: Stomp.Net
StompのWebサイトには、使用可能なその他のオプションが一覧表示されます。Stompのシンプルさは、RFC 6455で定義された WebSocketsの使用方法を定義することによるもので、IANA WebSocketsサブプロトコル・レジストリによって認識されます。WebSocketsを使用すると、ネットワーク構成は簡単に保護および管理できるHTTP/Sトラフィック上に存在するため、ネットワーク構成には不要な要求が適用されません。
WebSocketsを使用すると、オープン・スタンダードであり移植可能なため、標準のWebサービスよりもパフォーマンス上の利点があります。たとえば、RESTなどのソケットベース以外のAPIは、暗号化アルゴリズムなどのセキュリティ・レイヤーの使用を認証およびネゴシエーションするためのすべてのコールでハンドシェイクを実行します。Webソケットは、最初の接続時にのみこれを実行し、後続のすべてのデータ・フローは開いた接続で送信されます。
Stompの使用を示すOCI Queueデモの拡張では、Vertx Stompクライアントを使用してメッセージの接続と送受信を行いました。次の例のように、ステートメントはわずかな記述で済みます。:
StompClient.create(Vertx.vertx(),
new StompClientOptions()
.setHost(props.getProperty(HOSTNAME))
.setPort(61613)
.setSsl(true)
.setLogin(props.getProperty(LOGIN))
.setPasscode(props.getProperty(BASE64ENCODEDTOKEN));
options.setTcpKeepAlive(true)))
.connect().onSuccess(connection -> {
connection.send(props.getProperty(QUEUEOCID),
Buffer.buffer(“my message));
})));
このコード・フラグメントは、最も効率的でメンテナンス可能なアプローチではなく、最もコードがコンパクトなアプローチを表します。しかし、ポータブル・コードでOCI Queueを使用することのシンプルさと優雅さがわかります。
Infrastructure as CodeによるOCI Queueのデプロイ
Stompでは、キューの作成および破棄など、OCI REST APIのすべての機能が提供されるわけではありませんが、OCI Queue Terraformプロバイダを使用してプログラムでこれらの問題に対処できます。次のコード・ブロックに例を示します。:
resource "oci_queue_queue" "test_queue" {
#Required
compartment_id = ocid1.queue.oc1.iad.aaaabbbbcc
display_name = “test_queue”
#Optional
dead_letter_queue_delivery_count = 5
retention_in_seconds = 172800 # 2 days
timeout_in_seconds = 300
visibility_in_seconds = 60
}
コード・フラグメントと同様に、このコード・フラグメントはTerraformのベスト・プラクティスを反映していませんが、潜在的なシンプルさを示しています。
OCI Queueを使用するStompの例はAPIベースのデモ・ソリューションの拡張であるため、すべてのキー制御値を設定し、動作を決定する同じ制御スクリプトを使用してデプロイおよび実行できます。資格証明とQueue OCIDを設定するようにスクリプトを変更し、JavaがインストールされVertxライブラリがダウンロードされた後にスクリプトを実行します。リファレンス・アーキテクチャでは使用可能なOCIアーキテクチャ・オプションについて説明し、GitHubリポジトリには必要なすべてのドキュメントとソース・コードが含まれています。
今すぐ始めましょう
Oracle Cloud Infrastructure Queueの詳細は、次のリソースを参照してください。:
- 製品ページ
- 製品ドキュメント
- OCI Queueのアーキテクチャ・センター・プレイブック
- デモ付きのGitHubリポジトリ
- 他の機能の詳細を含む以前のOCI Queueブログ
- OCI Queue API
- Stompの仕様
- 既知のStompライブラリ実装の一部
- OCI Terraform
