Momento Topics に Node.js SDK を使って入門する
Momento Topics とは
Momento Topics は Momento クラウドインフラストラクチャ上に構築されたパブリッシュ/サブスクライブ(pub/sub)メッセージングサービスです!
主な特徴
-
スケーラビリティ
- 自動的にスケールアップ/ダウンし、トラフィックの変動に対応
-
低レイテンシー
- ミリ秒単位の応答時間を実現
-
シンプルな API
- 使いやすく、直感的な API を提供
-
サーバーレス
- インフラストラクチャの管理が不要
-
マルチプラットフォーム対応
- 複数の言語とプラットフォームに対応した SDK を提供
ユースケース
ユースケースとしては、以下のようなケースが挙げられます。
- リアルタイムチャット
- ライブ更新
- イベント駆動型アーキテクチャ
- マイクロサービス間の通信
基本的な概念
Momento Topics の基本的な概念は次の通りです。
-
トピック
- メッセージのカテゴリや経路を定義
-
パブリッシャー
- トピックにメッセージを送信するクライアント
-
サブスクライバー
- トピックからメッセージを受信するクライアント
もめんと会 - Momento Community (JP) のハンズオン
もめんとハンズオン #1 に参加して、Momento Topics に触れてきました!
初参加のもめんと会でしたが、参加者の方々とも交流できて、とても楽しかったです🥳🎉
Node.js SDK で Momento Topics を操作する
ハンズオンではパブリッシャーの実装まででしたが、サブスクライバーも実装してみたいと思います!
コンソールで Topics を作成する
Cache の作成
Cache コンソール でテスト用の Cache を作成します。
Topics の作成
Topics コンソール で Topics を作成します。
node 実行環境の初期化
以下のコマンドで node 実行環境の初期化して、必要はパッケージをインストールします。
npm init
npm i @gomomento/sdk dotenv
トークンの発行 と .env の作成
API キー コンソール で API トークンを作成します。
作成したトークンを .env の MOMENTO_API_KEY
に定義します。
MOMENTO_API_KEY=your_api_token
パブリッシャー の実装
トピックにメッセージを送信するクライアントのサンプルコードです。
// Declare the Momento SDK library
const { TopicClient, TopicConfigurations, CredentialProvider, } = require('@gomomento/sdk');
const dotenv = require('dotenv');
dotenv.config();
const publish = async () => {
// Create a new TopicClient instance
const topicClient = new TopicClient({
configuration: TopicConfigurations.Default.latest(),
credentialProvider: CredentialProvider.fromEnvironmentVariable({
environmentVariableName: 'MOMENTO_API_KEY',
}),
});
// Publish a message to a topic
topicClient.publish('test-cache', 'topic-test', 'Hello world!');
}
// Execute the publish function
publish();
非常に少ないコードでパブリッシャーの実装が完了しました👏
サブスクライバー の実装
トピックからメッセージを受信するクライアントのサンプルコードです。
const { TopicClient, TopicConfigurations, CredentialProvider } = require('@gomomento/sdk');
const dotenv = require('dotenv');
dotenv.config();
const subscribe = async () => {
// Create a new TopicClient instance
const topicClient = new TopicClient({
configuration: TopicConfigurations.Default.latest(),
credentialProvider: CredentialProvider.fromEnvironmentVariable({
environmentVariableName: 'MOMENTO_API_KEY',
}),
});
try {
console.log('Subscribed to topic. Waiting for messages...');
// Subscribe to a topic
await topicClient.subscribe('test-cache', 'topic-test', {
onItem: (message) => {
console.log('Received message:', message.valueString());
},
onError: (error) => {
console.error('Subscription error:', error);
},
});
} catch (error) {
console.error('Error:', error);
}
}
// Execute the subscribe function
subscribe();
パブリッシャー同様に、サブスクライバーも非常に少ないコードで実装が完了しました👏👏
動作確認
先にサブスクライバーを実行しておきます。
node subscribe.js
次にパブリッシャーを実行します。
node publish.js
実行結果です。
パブリッシャーが送信したメッセージがサブスクライバー側で表示されました!!!!
まとめ
Momento Topics に触れてみました!
もんめと会で丁寧なハンズオンで入門することができ、良い学びの場でした!!
Momento を使えば、サーバーレスの Pub/Sub サービスを簡単かつスピーディーに構築できます😌😌
複雑なコネクションの管理不要です。
そして、SDK を使うことで簡単にアプリケーションに組み込むことができます。
もっともっと Momento を活用していきたいです!
Discussion