tty の stdout と stderr を RabbitMQ にストリーミングしています (正確にはログ)。これらのログは Web サイトで表示でき、コンテンツが RabbitMQ にストリーミングされる間、Web サーバーによって消費され、WebSocket を使用してクライアントに転送されます。ログは、RabbitMQ に送信されるとすぐに永続化されます。
ユーザーが Web サイトにアクセスすると、永続化されたログがレンダリングされ、連続した部分が WebSocket を使用してストリーミングされます。問題は、永続化されたログに、サイトのレンダリングと WebSocket 経由の最初のチャンクの受信の間に発生したログのチャンクが欠落している可能性があるため、競合状態が発生することです。
私の考えは、すべてのチャンクをキューに保持し、接続後にそれらを WebSocket 経由で送信することでした。さらに、ワーカーを追加して、ある種の「終了」イベントをリッスンし、キュー内のすべてを一度に保持します。
問題は、RabbitMQ を使用してこれが可能かどうか、またはその方法がわからないことです。アイデアやその他の解決策はありますか?
特に問題はないと思いますが、私のスタックは Ruby Sinatra と Bunny RabbitMQ クライアントを使用しています。