Как получить доступ к кешу Coherence с одинаковым именем в нескольких кластерах? - PullRequest
1 голос
/ 21 марта 2012

У меня есть несколько кластеров Oracle Coherence, и на каждом кластере у меня одинаковый набор кэшей с одинаковыми именами.Как я могу получить доступ к одному кешу (скажем, «Cache1») из каждого кластера в моем приложении?Например, я могу захотеть проверить счетчик «Cache1» во всех средах для отображения пользователю.

Кластеры настроены с использованием Coherence Extend , и я настроил клиент-cache-config с отдельными отображениями кеша и схемами удаленного кеша для каждого кластера.Однако, если я установлю элемент cache-name в «Cache1» для каждого кластера, он будет получать данные только из первого кластера, указанного в xml.Если я установлю его на что-то другое (например, «Cache1-Dev1»), я получу исключение Tangosol.IO.Pof.PortableException с сообщением «Нет схемы для кэша:« Cache1-Dev1 »».

<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>

1 Ответ

3 голосов
/ 04 апреля 2012

Найдите ответ в другом месте.

Сначала получите экземпляр прокси-службы и приведите его к 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");

Этотакже означает, что вам больше не нужно перечислять кэши в разделе отображения кэша вашего XML-файла cache-config, хотя для выполнения последовательности требуется хотя бы одно отображение кэша, содержащее имя кэша и имя схемы, даже если это не так.не используется.

...