Webソケットを介してJMSバックエンドと対話するために.NETKaazingクライアントを利用しようとしています。セッションの正しい使い方を理解するのに苦労しています。最初は、すべてのスレッドで1つのセッションを共有していましたが、これがサポートされていないことに気付きました。
Sessionオブジェクトは、メッセージを生成および消費するためのシングルスレッドコンテキストです。Java仮想マシン(JVM)の外部にプロバイダーリソースを割り当てる場合がありますが、軽量のJMSオブジェクトと見なされます。
私が1回のセッションを行った理由は、それによってパフォーマンスが向上すると思ったからです。ドキュメントにはセッションが軽量であると記載されていたため、「操作」ごとにセッションを使用するようにコードを切り替えることを躊躇しませんでした。「操作」とは、単一のメッセージを送信するか、キュー/トピックにサブスクライブすることを意味します。前者の場合、セッションは短命であり、メッセージが送信された直後に閉じられます。後者の場合、サブスクリプションがアクティブである限り、セッションは存続する必要があります。
複数のセッションを作成しようとすると、エラーが発生しました。
System.NotSupportedException: Only one non-transacted session can be active at a time
このエラーをグーグルで検索しても効果がなかったので、トランザクションセッションに切り替えてみました。しかし、コンシューマーを作成しようとすると、別のエラーが発生します。
System.NotSupportedException: This operation is not supported in transacted sessions
だから私は岩と固い場所の間に立ち往生しているようです。私が見る唯一の可能なオプションは、スレッド間でセッションを共有するか、コンシューマーの作成に使用される単一の非トランザクションセッションと、その他すべての複数のトランザクションセッションを使用することです。これらのアプローチはどちらも、私には少し反しているように見えます。
誰かが私のクライアントでセッションを処理するための正しい方法に光を当てることができますか?