4

現在取り組んでいるアプリケーションの分散データ グリッド ソリューションとして Hazelcast を評価しています。Hazelcast は分散クラスター上にセットアップされ、私のアプリケーションは Spring を使用して Hazelcast クライアントを次のように定義します。

<hz:client id="hazelcastClient" group-name="dev" group-password="dev-pass">
  <hz:member>localhost:5701</hz:member>
</hz:client>

Hazelcast ノードのhazelcast.xmlファイルで、必要なすべての構成を使用してマップをセットアップしました。このマップの名前を としましょうmyMap。監視用の Hazelcast webapp (mancenter) を使用すると、このマップが適切に設定されていることがわかります。

アプリケーション側で、Bean に注入されるようにマップを構成する必要があります。私が何かをするなら

<hz:map id="myMap" instance-ref="hazelcastClient" name="myMap" />

そして、フェッチロジックを含む Bean にこのマップを注入しましたが、問題はありません。

MapLoaderただし、キャッシュから欠落しているデータを処理するために、インターフェイスを実装するクラスも作成しました。Maploader私の問題は、これを定義したキャッシュに結び付ける方法がわからないことです。次のようなことを試してみると

<hz:map id="myMap" instance-ref="hazelcastClient" name="myMap">
  <hz:map-store enabled="true" implementation="myMapLoader"/>
</hz:map>

hz:mapが最上位要素として使用されている場合 (hz:configたとえば、 内ではなく)、内部要素を指定できないように見えるため、XML 解析エラーが発生します。hz:configこれは、要素を定義する必要があると私に思わせます。hz:configただし、クライアントの要素を定義できるかどうかは、ドキュメントからはあまり明確ではありません。hz:configアプリケーションをクラスターの一部にしたい場合は、使用する必要があるようです。ただし、アプリをクラスターの一部にすることが論理的に正しいかどうかはわかりません。基本的には、データ グリッドのクライアントです。

希望する動作を実現するためにアプリを構成する方法について何か考えはありますか?

ありがとう!

4

1 に答える 1

14

クライアント側でマップを構成することはできません。Hazelcast ノードで構成する必要がmyMapあります。MapLoader/MapStoreMapStore/MapLoader 操作は、クライアントではなく、データを所有する Hazelcast ノードによって実行されます。

ヘーゼルキャストノード

<hz:config>
    ...
    <hz:map name="myMap" backup-count="1" max-size="0">
        <hz:map-store enabled="true" implementation="myMapLoader" />
    </hz:map>
    ...
</hz:config>

-または- hazelcast.xml を使用

<map name="myMap">
    <backup-count>1</backup-count>
    <time-to-live-seconds>0</time-to-live-seconds>
    <max-idle-seconds>0</max-idle-seconds>

    <map-store enabled="true">
        <class-name>foo.bar.MyMapLoader</class-name>
        <write-delay-seconds>0</write-delay-seconds>
    </map-store>
</map>

クライアント側ではインスタンス化するだけmyMapです。

<hz:map id="myMap" instance-ref="hazelcastClient" name="myMap" />

クライアントがそのマップにプット/マップから取得すると、ノードはクライアントのリクエストを処理し、MapLoader/MapStore を呼び出します。

于 2012-05-16T05:31:57.770 に答える