2016-07-19 4 views
0

複製領域に非同期イベントキューparallel=trueを持つためにGemfire/Geodeを設定しようとしています。しかし、私は、起動時に次の例外を取得しています:Gemfireの複製された領域に並列非同期イベントキューを設定します

com.gemstone.gemfire.internal.cache.wan.AsyncEventQueueConfigurationException: Parallel Async Event Queue myQueue can not be used with replicated region /myRegion 

この(すなわち、複製された領域上に並列キューを防ぐために)設計上の決定のようですが、それがそうである理由を私は理解できません。
私は見つけられた文書(主にhttp://gemfire.docs.pivotal.io/docs-gemfire/latest/reference/book_intro.htmlとその関連文書)、 を読んだことがあります。インターネット上でこの例外の参照を検索しましたが、なぜ私ができるのか明確な説明は見つかりませんでしたレプリケートされたリージョンをホストする各メンバーにイベントリスナーがあります。
私の結論は、レプリケートされたリージョンおよび/またはパラレル・キューに関する基本的な概念が欠落している必要がありますが、私は適切な文書 を単独で見つけることができないため、説明および/または正しいリソースを読み込みます。

ありがとうございます。

編集:質問を文脈に入れてみましょう。
パフォーマンスを最大限に引き出すためにノード間で負荷分散されたRESTサービスを使用して、アプリケーションにデータを送信する外部システムがあります。各ノードは同じ領域をホストしています(3つはA BとCという名前です)。データはこれらすべての領域(A〜B〜C)を通過し、途中で処理されます。これは、領域Aがちょうど受信されたデータをホストし、領域Bのデータが部分的に処理され、領域Cが処理が完了したデータをホストすることを意味する。
私はイベントリスナを使ってデータを処理し、それをリージョン間で移動します。また、リージョンCのリスナの場合は別の外部システムにエクスポートします。
すべてのリスナーはトランザクションでなければなりません(また、繰り返す必要があります)。
また、スケーラビリティ(つまり、スループットを向上させるためにノードを追加する)と、実現可能なデータ複製の最大量が必要です。
さらに、同じgemfire設定ですべてのノードを実行したいとします。

私は既にパーティション領域を使用しようとしましたが、私は簡潔さのためにここでは説明しないという理由のために私のニーズに合っていません(ただ信頼しています。 。

私は、複製されたリージョンをホストするすべてのノードを持つことは方法だと思っていましたが、アクティブ/アクティブのシナリオでイベントを独立して処理し、後でリージョン同期を実行できるようにする必要があります。これはイベント・キューを並列にする必要があると私は理解していますが、設計上可能ではないようです。

したがって、(更新された)質問は次のとおりです: このシナリオも可能ですか?それがあれば、どうすれば達成できますか? 説明やドキュメント、サンプル、リソースなど何でも歓迎するものではありません。

もう一度、ありがとうございます。

+0

私が答える前に、私は以下の質問に従います。1.あなたが物事を記述したやり方によって、すべてのメンバーはすべてのイベントを処理します(RESTを越えるイベントだけでなく)。つまり、各イベントをN回処理しています(N =>ノード数)。これでいい? – Swapnil

+0

はい、それは問題ありません。 –

+0

これで、C領域でCacheListenersを使用しないのはなぜですか?必要に応じてリスナーにスレッドプールを作成しますか? – Swapnil

答えて

1

AsyncEventQueueは、GemFireに到着したデータを他のデータストアに書き込むために使用されます。理想的にはこれを1回だけしたいと考えています。レプリケートされたリージョンの内容はシステムのすべてのメンバーで同じなので、一方のメンバーにはAsyncイベントリスナーのみが必要なため、parallel=trueはサポートされていません。あなただけAsyncQueueをホストつのメンバーを持っていた場合には区画された領域については

は、その後、区画された領域に一つ一つのプットは、その部材を介してルーティングされます。これにより、システム内の競合の単一点が導入されます。この問題の解決策は、並列AsyncQueuesの導入であり、各メンバーのイベントはそのメンバー内でローカルにのみキューに入れられます。

GemFireのもであってもレプリケート領域に対して各部材に呼び出されCacheListenersを、支持体は、しかしながら、それらは同期しています。 CacheListenerにスレッドプールを導入して、同じ機能を利用することができます。

+0

お返事ありがとうございます!いくつかの文脈を追加して質問を更新しました。 –

関連する問題