コンテンツにスキップ

nats

Since v8.0.75

natsモジュールは、JSHアプリケーション用のNATSクライアントを提供します。 mqttモジュールと同様にイベント駆動で動作し、Clientの作成時に自動的に接続を開始します。

一般的な使用方法は以下のとおりです。

const nats = require('nats');

Client

NATSクライアントオブジェクトです。

作成
new Client(options)
オプション
オプション説明
serversString[]nats://127.0.0.1:4222などのNATSサーバーURLの一覧
nameString接続名
userString認証ユーザー
passwordString認証パスワード
tokenString認証トークン
noRandomizeBooleanサーバーのランダム選択を無効化
noEchoBoolean自身が発行したメッセージのエコーを無効化
verboseBooleanverboseプロトコル動作を有効化
pedanticBooleanpedanticプロトコル検査を有効化
allowReconnectBoolean再接続を許可
maxReconnectNumber再接続の最大試行回数
reconnectWaitNumber再接続の待機時間(ミリ秒)
timeoutNumber接続のタイムアウト(ミリ秒)
drainTimeoutNumberdrainのタイムアウト(ミリ秒)
flusherTimeoutNumberフラッシュのタイムアウト(ミリ秒)
pingIntervalNumberpingの間隔(ミリ秒)
maxPingsOutNumber応答待ちのpingの最大数
retryOnFailedConnectBoolean初回接続の失敗時に再試行
skipHostLookupBooleanホスト検索の最適化をスキップ
使用例
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
const nats = require('nats');

const client = new nats.Client({
    servers: ['nats://127.0.0.1:4222'],
    name: 'test-client',
    allowReconnect: true,
    maxReconnect: 10,
    reconnectWait: 2000,
    timeout: 10 * 1000,
});

プロパティ

config

client.configは、解析済みのネイティブNATS設定を提供します。

代表的なフィールドは以下のとおりです。

  • servers
  • name
  • allowReconnect
  • maxReconnect
  • reconnectWait
  • timeout
console.println(client.config.servers);
console.println(client.config.timeout);

メソッド

publish()

サブジェクトにメッセージを発行します。

構文
publish(subject, message[, options])
パラメーター
  • subject String
  • message String | Uint8Array | Object | Array
  • options Object (省略可能)

対応するoptionsのフィールド:

オプション説明
replyString要求・応答方式で使用する応答サブジェクト

ObjectとArrayは、発行前にJSONにエンコードします。

戻り値

なし。結果はpublishedまたはerrorイベントで通知します。

subscribe()

サブジェクトを購読します。

構文
subscribe(subject[, options])
パラメーター
  • subject String
  • options Object (省略可能)

対応するoptionsのフィールド:

オプション説明
queueStringキューサブスクリプション用のキューグループ名
戻り値

なし。結果はsubscribedまたはerrorイベントで通知します。

close()

クライアント接続を閉じます。

構文
close()

イベント

open

接続が完了すると発生します。

client.on('open', () => { ... })

message

購読したメッセージを受信すると発生します。

client.on('message', (msg) => { ... })

msgのフィールド:

プロパティ説明
topicStringMQTT形式のハンドラーとの互換性のためのサブジェクトの別名
subjectStringNATSサブジェクト
replyString要求・応答処理で使用する応答サブジェクト
payloadStringメッセージのペイロード

subscribed

サーバーが購読を受け付けると発生します。

client.on('subscribed', (subject, reason) => { ... })
  • subject String
  • reason Number

現在の実装では、購読成功時に1を使用します。

published

発行リクエストが完了すると発生します。

client.on('published', (subject, reason) => { ... })
  • subject String
  • reason Number

現在の実装では、発行の成功時に0を使用します。

error

接続、購読、発行の失敗時に発生します。

client.on('error', (err) => { ... })
  • err Error

close

close()を呼び出すと発生します。

client.on('close', () => { ... })

基本的な発行・購読の例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const nats = require('nats');

const client = new nats.Client({
    servers: ['nats://127.0.0.1:4222'],
    name: 'test-client',
    timeout: 10 * 1000,
});

client.on('open', () => {
    console.println('Connected');
    client.subscribe('test.subject');
});

client.on('subscribed', (subject, reason) => {
    console.println('Subscribed to:', subject, 'reason:', reason);
    client.publish('test.subject', 'Hello, NATS!');
});

client.on('message', (msg) => {
    console.println('Message received on subject:', msg.subject, 'payload:', msg.payload);
    client.close();
});

client.on('close', () => {
    console.println('Disconnected');
});

要求・応答の例

要求・応答処理では、応答サブジェクトを先に購読し、options.replyを指定して発行します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const nats = require('nats');

const handler = new nats.Client({
    servers: ['nats://127.0.0.1:4222'],
});
handler.on('open', () => {
    handler.subscribe('request.subject');
});
handler.on('message', (msg) => {
    handler.publish(msg.reply, 'pong');
});

const requester = new nats.Client({
    servers: ['nats://127.0.0.1:4222'],
});
requester.on('open', () => {
    requester.subscribe('reply.subject');
    requester.publish('request.subject', 'ping', { reply: 'reply.subject' });
});
requester.on('message', (msg) => {
    console.println(msg.payload);
    requester.close();
    handler.close();
});

動作に関する注意

  • Clientは、コンストラクターで自動的に接続を開始します。
  • キューサブスクリプションは、subscribe(subject, { queue: 'workers' })で使用できます。
  • 接続が開く前にpublish()またはsubscribe()を呼び出すと、errorイベントが発生します。
  • 現在の実装では、メッセージのペイロードは文字列で提供されます。
最終更新日