1

複数のOracle Coherenceクラスタがあり、各クラスタには同じキャッシュ名を持つ同じキャッシュ・セットがあります。アプリケーション内の各クラスターから単一のキャッシュ (「Cache1」など) にアクセスするにはどうすればよいですか? たとえば、すべての環境で「Cache1」の数を確認して、ユーザーに表示したい場合があります。

クラスタはCoherence Extendを使用してセットアップされ、クラスタごとに個別のキャッシュ マッピングとリモート キャッシュ スキームを使用してクライアント側のキャッシュ構成をセットアップしました。ただし、各クラスターの cache-name 要素を「Cache1」に設定すると、xml にリストされている最初のクラスターからのみデータが取得されます。それを別のもの (例: "Cache1-Dev1") に設定すると、「キャッシュのスキームがありません: "Cache1-Dev1"」というメッセージとともに Tangosol.IO.Pof.PortableException が発生します。

<cache-config xmlns="http://schemas.tangosol.com/cache">
  <caching-scheme-mapping>
    <cache-mapping>
      <cache-name>Cache1-Dev1</cache-name>
      <scheme-name>extend-direct-dev1</scheme-name>
    </cache-mapping>
    <cache-mapping>
      <cache-name>Cache1-Dev2</cache-name>
      <scheme-name>extend-direct-dev2</scheme-name>
    </cache-mapping>
  </cache-scheme-mapping>
<caching-schemes>
<remote-cache-scheme>
  <scheme-name>extend-direct-dev1</scheme-name>
  <service-name>ExtendTcpCacheService-dev1</service-name>
  <initiator-config>
    <tcp-initiator>
      <remote-addresses>
        <socket-address>
          <address>dev1-address</address>
          <port>9500</port>
        </socket-address>
      </remote-addresses>
    </tcp-initiator>
    <outgoing-message-handler>
      <request-timeout>60s</request-timeout>
    </outgoing-message-handler>
  </initiator-config>
</remote-cache-scheme>
<remote-cache-scheme>
  <scheme-name>extend-direct-dev2</scheme-name>
  <service-name>ExtendTcpCacheService-dev2</service-name>
  <initiator-config>
    <tcp-initiator>
      <remote-addresses>
        <socket-address>
          <address>dev2-address</address>
          <port>9500</port>
        </socket-address>
      </remote-addresses>
    </tcp-initiator>
    <outgoing-message-handler>
      <request-timeout>60s</request-timeout>
    </outgoing-message-handler>
  </initiator-config>
</remote-cache-scheme>
</cache-config>
4

1 に答える 1

3

他の場所で答えを見つけました。

まず、プロキシ サービス インスタンスを取得し、それを CacheService にキャストします。その後、そのサービス インスタンスからキャッシュを取得できるはずです。

Java 実装:

Service service = CacheFactory.getService("ExtendTcpCacheService-dev1");
CacheService cacheService = (CacheService) service;
NamedCache cache = cacheService.ensureCache("Cache1");

コードは C# とほぼ同じです。

var service = CacheFactory.GetService("ExtendTcpCacheService-dev1");
var cacheService = (ICacheService)service;
var cache = cacheService.EnsureCache("Cache1");

これはまた、cache-config xml ファイルの cache-mapping セクションにキャッシュをリストする必要がなくなったことを意味します。使用されません。

于 2012-04-04T08:10:12.557 に答える