mcpField
N
nats

nats

github.com/claude-dev-suite開発4695 回インストール2 日前に更新
リポジトリ

nats について

natsは、NATSを使ったメッセージングシステムを構築する開発者向けのスキルです。Core NATSとJetStream、サブジェクトのパターン、コード例、トラブルシューティング、本番環境の設定項目を扱います。

主な機能

  1. 01Core NATSとJetStreamの違いを解説
  2. 02サブジェクト命名とワイルドカードの例
  3. 03Node.js、Python、Goの使用例
  4. 04アンチパターンとトラブル対応を掲載
  5. 05本番環境のチェックリストを提供

活用シーン

  1. 01NATSのパブリッシュとサブスクライブの基礎を学ぶ
  2. 02用途に応じてCore NATSかJetStreamを選ぶ
  3. 03サブジェクト、リクエストタイムアウト、処理遅延を調査
  4. 04本番環境のセキュリティとクラスタ設定を確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/claude-dev-suite/claude-dev-suite --skill nats

インストール後、Claude Code で/natsを入力して読み込まれたか確認します。

同梱ファイルadvanced.md

詳細

NATS Core の知識

完全なリファレンス:JetStream のパターン(Node.js、Java)、セキュリティ設定、TLS のセットアップ、クラスタリングについては、advanced.md を参照してください。

詳細な知識:包括的なドキュメントを参照するには、technology: nats を指定して mcp__documentation__fetch_docs を使用してください。

クイックスタート(Docker)

# docker-compose.yml
services:
  nats:
    image: nats:latest
    ports:
      - "4222:4222"   # Client
      - "8222:8222"   # Monitoring
    command: "-js -m 8222"  # Enable JetStream

コアコンセプト

機能Core NATSJetStream
永続化なしあり
配信最大 1 回最低 1 回
リプレイなしあり
コンシューマーグループキューグループコンシューマーグループ

サブジェクトのパターン

orders.created     → Specific subject
orders.*           → orders.created, orders.updated (single wildcard)
orders.>           → orders.created, orders.us.east (multi wildcard)

Core NATS(Node.js)

import { connect, StringCodec } from 'nats';

const nc = await connect({ servers: 'localhost:4222' });
const sc = StringCodec();

// Simple publish
nc.publish('orders.created', sc.encode(JSON.stringify(order)));

// Subscribe
const sub = nc.subscribe('orders.*');
for await (const msg of sub) {
  const order = JSON.parse(sc.decode(msg.data));
  console.log(`Received on ${msg.subject}:`, order);
}

// Queue group (load balancing)
const qsub = nc.subscribe('orders.process', { queue: 'workers' });

// Request/Reply
const response = await nc.request('orders.validate', sc.encode(JSON.stringify(order)), {
  timeout: 5000,
});
const result = JSON.parse(sc.decode(response.data));

await nc.drain();

Core NATS(Python)

import nats
import json
import asyncio

async def main():
    nc = await nats.connect("nats://localhost:4222")

    # Publish
    await nc.publish("orders.created", json.dumps(order).encode())

    # Subscribe
    async def message_handler(msg):
        order = json.loads(msg.data.decode())
        print(f"Received: {order}")

    await nc.subscribe("orders.*", cb=message_handler)

    # Request/Reply
    response = await nc.request("orders.validate",
                                json.dumps(order).encode(),
                                timeout=5)
    result = json.loads(response.data.decode())

    await nc.drain()

asyncio.run(main())

Core NATS(Go)

nc, _ := nats.Connect(nats.DefaultURL)
defer nc.Drain()

// Publish
body, _ := json.Marshal(order)
nc.Publish("orders.created", body)

// Subscribe
nc.Subscribe("orders.*", func(msg *nats.Msg) {
    var order Order
    json.Unmarshal(msg.Data, &order)
    processOrder(order)
})

// Queue group
nc.QueueSubscribe("orders.process", "workers", func(msg *nats.Msg) {
    // Load balanced
})

// Request/Reply
response, _ := nc.Request("orders.validate", body, 5*time.Second)

このスキルを使用しない場合

  • 長期的なイベントのリプレイが必要な場合 — Kafka のほうが保持に適しています
  • 複雑なルーティングパターンが必要な場合 — RabbitMQ のエクスチェンジのほうが柔軟です
  • JMS への準拠が必要な場合 — ActiveMQ を使用してください
  • AWS ネイティブの統合が必要な場合 — SQS のほうが統合に適しています

アンチパターン

アンチパターン問題点解決策
重要なデータに Core NATS を使用する配信保証がない永続化には JetStream を使用する
サブジェクトに階層構造がないフィルタリングが困難ドット区切りのサブジェクトを使用する
リクエストにタイムアウトがないリクエストが停止する常にタイムアウトを設定する
ペイロードが大きいネットワークに負荷がかかるメッセージを小さく保つ
本番環境で単一サーバーを使用する高可用性がない3 台以上のサーバークラスターをデプロイする

クイックトラブルシューティング

問題考えられる原因対処方法
メッセージを受信できないサブジェクトが正しくないサブジェクト名を確認し、ワイルドカードをチェックする
リクエストがタイムアウトする応答するサーバーがない応答するサーバーが存在することを確認する
JetStream のエラー有効になっていない-js フラグを指定してサーバーを起動する
コンシューマーの遅延が増加する処理が遅いコンシューマーを追加するか、処理を最適化する
ACK がタイムアウトする処理に時間がかかりすぎているack_wait を増やす

本番環境チェックリスト

  • TLS を有効にする
  • 認証を設定する
  • 認可(権限)を設定する
  • JetStream のレプリカ数を 3 以上にする
  • ストリームの制限を設定する
  • コンシューマーの max_deliver を設定する
  • ACK タイムアウトを設定する
  • 監視ダッシュボードを用意する
  • クラスターのヘルスチェックを行う

リファレンスドキュメント

利用可能なトピック:basics、jetstream、patterns、production

コメント