5

同じホストで2つのTomcatインスタンスを実行します。各インスタンスは、RMIレプリケーションを介していくつかのehcacheキャッシュと通信しようとする同じWebアプリケーションを実行します。ehcacheで自動検出構成を使用しているので、どのホストとどのキャッシュを複製するかを明示的に定義する必要はありません。ehcacheインスタンスは、お互いを見つけて通信することはできません。

DEBUG (RMIBootstrapCacheLoader.java:211) - cache peers: []
DEBUG (RMIBootstrapCacheLoader.java:133) - Empty list of cache peers for cache org.hibernate.cache.UpdateTimestampsCache. No cache peer to bootstrap from.

同じことを試しても、今回は各Tomcatインスタンスを別々のホスト(ボックス)で実行すると、すべてが魅力のように機能します。

インスタンスが同じホスト上にある場合、何か問題が発生していますか、それともマルチキャストによる自動検出ができませんか?

私の構成では、 RMI分散キャッシングのドキュメントに示されているデフォルトを使用しています。

<cacheManagerPeerProviderFactory
        class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
        properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, 
                    multicastGroupPort=4446, timeToLive=32"/>
<cacheManagerPeerListenerFactory
        class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
        properties="port=40001, socketTimeoutMillis=2000"/>

そして、複製したい各キャッシュ領域内には、次のものがあります。

<cacheEventListenerFactory
        class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" 
        properties="asynchronousReplicationIntervalMillis=500 " />
<bootstrapCacheLoaderFactory 
        class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" />

ありがとう

4

1 に答える 1

5

インスタンスが同じホスト上にある場合、何か問題が発生していますか、それともマルチキャストによる自動検出ができませんか?

私はehcacheにあまり詳しくありませんが、これは可能だと思います。実際、少なくとも同様のことを行う例を提供しています(ホストごとに複数のノード、ただし1つのインスタンスのみ)。RMI分散の完全な例のセクションを参照してください。あなたが言及したキャッシングドキュメント。

通常、同じTCPポート(ここでは40001)をホストごとに複数回開くことはできませんが、それを割り当てる最初のアプリケーション/サービスにバインドされます(たとえば、WindowsでのTCPポート共有などは存在しますが、特にそれを説明します)。

したがって、実際に同じデフォルト構成を使用している場合、TCPポート40001を割り当てようとしている2番目のTomcatインスタンスはそうすることができません。もちろん、これはTomcatログのどこかで明らかになるはずですが、すでに徹底的に調べましたか?

1つのTomcatインスタンスに別の空きポートを使用するだけで問題が解決するはずです。上記の完全な例のehcache.xml内で、これが実際に動作していることがわかります。ポート番号は、ノードごとに40001から40006まで1つずつ増加します。

于 2009-08-24T14:48:56.663 に答える