我有几个Oracle Coherence群集,在每个群集上,我有相同的缓存名称集。如何从应用程序中的每个群集访问单个缓存(比如“Cache1”)?例如,我可能想要检查所有环境中“Cache1”的数量以显示给用户。
使用Coherence Extend设置群集,我已经为每个群集设置了客户端缓存配置,其中包含单独的缓存映射和远程缓存方案。但是,如果我为每个集群将cache-name元素设置为“Cache1”,它只会从xml中列出的第一个集群中检索数据。如果我将其设置为其他内容(例如“Cache1-Dev1”),我会得到一个Tangosol.IO.Pof.PortableException,其消息为“No scheme for cache:”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>
答案 0 :(得分: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部分列出缓存,尽管你需要至少一个包含cache-name和scheme-name的缓存映射来运行一致性,即使没有使用它。