2012-03-01 1 views
0

送受信メッセージの形式を定期的に変更する必要があるサーバーを作成しています。これが起こったとき、サーバは、将来のすべてのメッセージが新しいフォーマットを有するという通知を送信し、クライアントがそのackを送信するまで古いフォーマットで受信した全てを読み取るべきである。パイプラインの再構成のためにパイプライン上で書き込みをブロックするにはどうすればよいですか?

私はすべてのパイプラインで共有されているデコーダへの参照を保持し、必要に応じて外部から再構成することを考えました。この場合、並行性が心配です。

  • 私はデコーダで作業している間にパイプラインで書き込みが処理されないようにするにはどうすればよいですか?
  • と、 の通知が再構成後に最初に処理されるメッセージであることを確認する方法はありますか?

私が見る他の唯一の方法は、パイプラインを通じて(channel.writeを使用して) "通知"オブジェクトを送信し、デコーダでオブジェクトを捕捉し、通知メッセージを転送しながら再構成を行うことです。この場合、パイプラインには並行性があってはいけません。

  • これはこれを行うための最善の方法ですか?

答えて

0

私は第2の方法を使用することに決めました。 StateHandlerがConfigurationEventsをキャッチしてパイプラインを再構成します。残念ながら、これは、再構成と極端に若いチャネル間の競合状態が発生する可能性があるため、すべてのチャネルが同じ構成を使用していることを確認できないことを意味します。しかし、私はこれが私の場合には関係ないとはかなり確信しています。

関連する問題