まず、Discourse の推奨設定は十分に理解していますが、現時点では私の制御外にあるのが実情です。
本題に入ります。私のクライアントは、Discourse をバックエンドとして使用するカスタム React フロントエンドを構築しました。私はプロジェクトを問題のある状態で引き継ぎ、以前の開発者が ActionCable を Discourse に無理やり組み込もうとしていたことがわかりました。Discourse にはすでにリアルタイム機能のために Message Bus が搭載されているため、それを使用すべきだと考えました。
ローカル環境では成功しました。Message Bus は「そのまま機能」し、Discourse のデフォルトの Message Bus チャンネルすべてにサブスクライブでき、さらに独自のチャンネルも作成できました。
問題が発生しているのはリモート環境です。AWS EC2 インスタンスにデプロイしており、ALB の背後にあり、環境構築は自社で行っています。Docker 方式を採用したかったのですが、クライアントはこのプロジェクトの段階で変更を行うための予算と時間を確保できなかったためです ![]()
主な症状は、Message Bus がひどく遅延することです。リアルタイム性はほとんど感じられませんが、Message Bus の設定はローカルでは正常に動作しているため、設定に問題があるわけではありません。つまり、別の要因が原因であるはずです。
Discourse のデフォルト nginx 設定をほぼそのまま使用しています。当初はこれが問題だと考え、Message Bus 用の nginx 設定が不足していたため追加しましたが、それでも解決しませんでした。
Chrome のネットワークタブを確認したところ、明らかに問題があることがわかりました。/poll リクエストが 25 秒間待機し、その後数ミリ秒でコンテンツをダウンロードしているのです。ローカル環境や meta サイトで動作しているように、待機時間が短く、ダウンロード時間が長いはずなのに、その逆になっています。
これが AWS ALB の問題である可能性も認識していますが、どこから手をつけてよいか全く見当がつきません。@sam 氏に何か問題の原因がわかるか、あるいは方向性を示唆できるかお伺いしたいです。
いつもの通り、あらゆるご支援を心より感謝いたします!
