NATSとは
Goで書かれたメッセージングシステムです。 NATSサーバーとNATSクライアントとして提供されており、クライアントライブラリは様々なプログラミング言語で利用可能です。 設計思想: ・ハイパフォーマンス ・高可用性 ・超軽量 ・QoSサポート ・同期・非同期メッセージングのサポート 主要な機能としては下記があります。 ・pub-sub ・クラスタリング ・クライアントの自動剪定 ・テキストベースプロトコル ・QoS ・サブスクリプションの維持(NATSストリーミング限定) ・イベントストリーミング(NATSストリーミング限定) ・メッセージキャッシング(NATSストリーミング限定)Pub-Subモデル概念図

Pub-Subデモ
NATSのページに分かりやすいデモがあるので試してみます。サブスクライバの設定
サポート企業が準備したNATSサーバーに接続します。 ターミナルを開いて下記コマンドを実行します。 コマンドtelnet demo.nats.io 4222
結果
Trying 107.170.221.32...
Connected to demo.nats.io.
Escape character is '^]'.
INFO
{"server_id":"Fzwx2ndlHFg3lvVwwdBRSe","version":"0.9.6","go":"go1.7.4","host":"0.0.0.0","port"4222,"auth_required":false ,"ssl_required":false,"tls_required":false,"tls_verify":false,"max_payload":1048576}
goのバージョンとか色々出てますね。
さっそくサブスクライバの設定をします。
コマンド
sub foo.* 90
結果。
+OK
これでパブリッシャーがfoo.*のID90のサブジェクトに何かメッセージを送れば、サブスクライバにメッセージが届くはず。
パブリッシャーの設定
サブスクライバ側のターミナルはそのままで、パブリッシャー用として別のターミナルを立ち上げてtelnetでNATSサーバーに接続します。 コマンドtelnet demo.nats.io 4222
パブリッシャーとしてHelloを送信する。
サブスクライバ側にHelloが出るはず。。。
*パブリッシャー側コマンド
pub foo.bar 5 //5まで入力したらエンター
hello
*パブリッシャー側結果
+OK
*サブスクライバ側の結果
MSG foo.bar 90 5
hello
OK!!メッセージ届きました。
別ターミナルをさらに開いてサブスクライバの数を増やしたら、複数のクライアントにまとめてメッセージが送れました。
サブスクライブの停止
サブスクライバの設定を切ってメッセージが届かないようにします。 *サブスクライバ側のコマンドunsub 90
*サブスクライバ側の結果
+OK
*パブリッシャー側のコマンド
pub foo.bar 5 //5まで入力したらエンター
hello
*パブリッシャー側の結果
+OK
サブスクライバ側にメッセージが届かないことを確認できました!
PING/PONについて
NATSサーバーの機能として、「クライアントの自動剪定」がありますが、このデモを行なっている最中にも時間が経つとサーバーから死活監視のPINGが下記のように送られて来る時があります。PING
これにPING(pingでも大丈夫見たい)を返さないと接続切断されますのでご注意を…