
398
11
章 メッセージ通信と統合
return channel.assertQueue(`chat_srv_${httpPort}`, {exclusive: true});
})
// ...
ws.on('message', msg => {
console.log(`Message: ${msg}`);
channel.publish('chat', '', new Buffer(msg));
});
// ...
既に見たように、このチャットサーバは永続サブスクライバである必要はなく「設定して忘れる」パラ
ダイムで十分です。したがってキュー生成時にオプション
{exclusive:true}
を渡して、そのキュー
の対象を現在の接続に限り、チャットサーバが終了するとすぐに破棄することを指示します。
新しいメッセージのパブリッシュもとても簡単です。単に対象とする交換器(
chat
)とルーティング
キーを指定
するだけでよいのです。今回はファンアウト交換器を使うため、ルーティングキーは空(
''
)
です。
これで改良したアーキテクチャを試すことができます。それにはチャットサーバ
2
つと履歴サービス
を起動します。
$ node app 8080
$ node app 8081
$ node historySvc
では、ダウン時にこのシステム、特に履歴サービスがどうなるかに注目してください。履歴サーバを
停止させて、チャットアプリケーションのウェブ
UI
を使ってメッセージの送信を続けます。履歴サー
バが再起動する ...