📬

Momento Topics に Node.js SDK を使って入門する

2024/06/27に公開

Momento Topics とは

Momento Topics は Momento クラウドインフラストラクチャ上に構築されたパブリッシュ/サブスクライブ(pub/sub)メッセージングサービスです!

https://jp.gomomento.com/services/momento-topics/

主な特徴

  1. スケーラビリティ
    • 自動的にスケールアップ/ダウンし、トラフィックの変動に対応
  2. 低レイテンシー
    • ミリ秒単位の応答時間を実現
  3. シンプルな API
    • 使いやすく、直感的な API を提供
  4. サーバーレス
    • インフラストラクチャの管理が不要
  5. マルチプラットフォーム対応
    • 複数の言語とプラットフォームに対応した SDK を提供

ユースケース

ユースケースとしては、以下のようなケースが挙げられます。

  • リアルタイムチャット
  • ライブ更新
  • イベント駆動型アーキテクチャ
  • マイクロサービス間の通信

基本的な概念

Momento Topics の基本的な概念は次の通りです。

  1. トピック
    • メッセージのカテゴリや経路を定義
  2. パブリッシャー
    • トピックにメッセージを送信するクライアント
  3. サブスクライバー
    • トピックからメッセージを受信するクライアント

もめんと会 - Momento Community (JP) のハンズオン

もめんとハンズオン #1 に参加して、Momento Topics に触れてきました!

https://momentocommunity.connpass.com/event/321407/

初参加のもめんと会でしたが、参加者の方々とも交流できて、とても楽しかったです🥳🎉

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 に定義します。

.env
MOMENTO_API_KEY=your_api_token

パブリッシャー の実装

トピックにメッセージを送信するクライアントのサンプルコードです。

publish.js
// 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();

非常に少ないコードでパブリッシャーの実装が完了しました👏

サブスクライバー の実装

トピックからメッセージを受信するクライアントのサンプルコードです。

subscribe.js
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 を活用していきたいです!

参考

コラボスタイル Developers

Discussion