ホーム>source

私は、リモートApache Geodeサーバーを使用するSpring BootアプリにSpring Data Geodeを使用しています。ローカルリージョンを設定するには、 @Configuration を使用しています次のようなクラス:

<前>ウィズウィズ

これにより、リージョンでデータを配置および取得できます。

キーをサブスクライブすることに関心を登録すると、サブスクリプションは次のようにscope = LOCALでセットアップされます。

<前>ウィズウィズ

そして、後でリージョン内のイベントをサブスクライブするときに、ローカルサブスクリプションがサーバーリージョンイベントを表示できるように、CACHING_PROXYとして設定したいと思います。

私は @Configuration public class GeodeConfig { public static Region<String, String> myRegion; @Bean("setupMyRegion") public Region<String, String> setupMyRegion(GemFireCache cache) { Region<String, String> r = cache.getRegion("myRegion"); myRegion = r; return r; } } を設定しました org.apach.geode.inter.cache.LocalRegion 4439 logKeys: org.apache.geode.internal.cache.LocalRegion[path='/myRegion';scope=LOCAL';dataPolicy=NORMAL; concurrencyChecksEnabled] refreshEntriesFromServerKeys count=1 policy=KEYS_VALUES そして私は設定しようとしています

<前>ウィズウィズ

これをどこでやればいいのか分かりません。私は subscriptionEnabled=TRUE を試しました注釈が、地域はまだローカルに設定されています。

GemFireCacheからリージョンファクトリを作成しようとすると、タイプGemFireCacheに対してメソッドcreateClientRegionFactory(ClientRegionShortcut)が「未定義」であるというエラーが発生します。

ありがとう

@ClientCacheApplication
あなたの答え
  • 解決した方法 # 1

    一般に、Apache Geode APIを直接使用してBeanを構成することはお勧めできません。 環境。例えば...

    ウィズウィズ
    

    またはとして:

    ウィズウィズ
    

    上記の両方のアプローチはない おすすめ!

    Apache GeodeのSpringデータ (SDG)特定の ウィズウィズ  同じことをする。たとえば、SDG @Bean("MyRegion") public Region<String, Object> myRegion(GemFireCache cache) { return cache.getRegion("myRegion"); }

    あなたは @Bean("MyRegion") public Region<String, Object> myRegion(ClientCache clientCache) { return clientCache.createClientRegionFactory(ClientRegionShortcut.CACHING_PROXY) .create("MyRegion"); } を使うでしょう  次のようにSpringアプリケーション構成で:

    ウィズウィズ
    

    SDG FactoryBeans があります  [クライアント] ClientRegionFactoryBean などのさまざまなタイプのGeodeオブジェクト 、 ClientRegionFactoryBean@Bean("MyRegion") ClientRegionFactoryBean<String, Object> myRegion(ClientCache clientCache) { ClientRegionFactoryBean<String, Object> myRegion = new ClientRegionFactoryBean<>(); myRegion.setCache(clientCache); myRegion.setShortcut(ClientRegionShortcut.CACHING_PROXY); return myRegion; }FactoryBeansRegions 、など

    これらの Indexes  Geodeオブジェクトの「ライフサイクル」を確保するために不可欠です (例: DiskStores )のライフサイクルに適切に同期されます 容器。 SDGの GatewayReceivers の使用を中止する  ライフサイクルの同期を事実上無視しているため、GeodeのAPIを使用する場合は、Geodeオブジェクト自体のライフサイクルを担当します。これは、SDGがそもそも存在する主な理由の1つです。

    「クライアント」 GatewaySenders   FactoryBeans でなければなりません  (例: Region(s)  または FactoryBeans )サブスクリプションを有効にし、そのリージョンのサーバーから興味深いイベントを受信するため。これは、Geodeクラスター(サーバー)が、クライアントが受信への関心を表明したイベントのクラスターに接続するときに、クライアントのサブスクリプションキューを維持するためです。

    Region の場合  クライアント *PROXY 、これはクライアントが PROXY  対応するサーバー側のピアキャッシュ CACHING_PROXY が必要  同じ名前で。

    SDGの注釈ベースの構成モデル、具体的には *PROXY を使用することにより、一般にリージョンの作成、特にクライアントのリージョンの作成を簡素化できます。  または Regions

    例えば:

    ウィズウィズ
    

    もちろん、これは、次のようなアプリケーションドメインモデルエンティティクラスが定義されていることを前提としています。

    ウィズウィズ
    

    ウィズウィズ  次のように入力されます: Region

    詳細については、SDG Annotationベースの構成モデルのドキュメントを参照してください。具体的には、リージョン定義を対象としたAnnotation構成です。

    ウィズウィズ  アノテーションはクライアント側の Region を定義します  すべての既存のサーバー側 @EnableEntityDefinedRegions  クライアントが接続する先。

    たとえば、次のようにGfshでクラスターを起動するとします。

    <前>ウィズウィズ

    それから春のブーツ、 @EnableCachingDefinedRegions  アプリケーションには、「Example」、「AnotherExample」という名前の2つのSpring、地域クライアントBeanが @ClientCacheApplication(subscriptionsEnabled = true) @EnableEntityDefinedRegions(basePackageClasses = SomeEntity.class, clientRegionShortcut = ClientRegionShortcut.CACHING_PROXY) class GeodeConfiguration { ... } として含まれます。 。

    現在クラスターにサーバー側リージョンがない場合、 package example.app.model; import ...; @Region("MyRegion") class SomeEntity { @Id private Long id; ... }  クライアント側の ClientRegionFactoryBean を定義しない 。

    とにかく、これが理にかなって、役立つことを願っています!

    乾杯!

    ClientRegionFactoryBean<Long, SomeEntity>

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ Rails APIアプリケーションを使用して応答でHTTPOnly Cookieを送信する