CAS (11) —— CAS TicketRegistry使用Ehcache的集群方案
2024-10-18 17:33:33
CAS (11) —— CAS TicketRegistry使用Ehcache的集群方案
摘要
CAS TicketRegistry使用Ehcache的集群方案
版本
tomcat版本: tomcat-8.0.29
jdk版本: jdk1.8.0_65
cas版本: 4.1.3
**cas4.1.3 (4.x还在开发过程中不是很稳定,迭代比较快,也会有些bug) **
cas-client-3.4.1
Ehcache版本: 2.10.1
内容
目标架构
准备
参照下列文章配置好相关环境
配置
Ehcache Maven
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-integration-ehcache</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.6.11</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.10.1</version>
</dependency>
Ehcache配置文件ehcache-replicated.xml
节点a(以端口8433为例)
<ehcache name="ehCacheTicketRegistryCache"
updateCheck="false"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> <diskStore path="java.io.tmpdir/cas"/> <!--
| Automatic peer discovery
| See http://ehcache.org/documentation/user-guide/rmi-replicated-caching#automatic-peer-discovery
| for more information.
-->
<!--
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, multicastGroupPort=4446, timeToLive=32"
propertySeparator="," />
--> <!--
| Manual peer discovery
| See http://ehcache.org/documentation/user-guide/rmi-replicated-caching#manual-peer-discovery-manual-peer-discovery
| for more information
-->
<!--
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual,rmiUrls=//peer-2:41001/cas_st|//peer-3:41001/cas_st|//peer-2:41001/cas_tgt|//peer-3:41001/cas_tgt" />
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="port=41001,remoteObjectPort=41002" />
--> <cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual,rmiUrls=//127.0.0.1:41041/cas_st|//127.0.0.1:41041/cas_tgt" />
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="port=41031, remoteObjectPort=41032" /> </ehcache>
节点b(以端口8443为例)
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual,rmiUrls=//127.0.0.1:41031/cas_st|//127.0.0.1:41031/cas_tgt" />
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="port=41041,remoteObjectPort=41042" />
注意以上ProviderFactory和ListenerFactory中的给出的端口:
ListenerFactory是指定本地Cache节点的端口
ProviderFactory是配置远程Cache节点的端口
如果二个以上节点,则所有节点都要列出并用 | 符号分隔
Ehcache在CAS TicketRegistry.xml 中的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://www.springframework.org/schema/c"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
" >
<description>
Configuration for the default TicketRegistry which stores the tickets in Ehcache
</description>
<bean id="ticketRegistry"
class="org.jasig.cas.ticket.registry.EhCacheTicketRegistry"
p:serviceTicketsCache-ref="serviceTicketsCache"
p:ticketGrantingTicketsCache-ref="ticketGrantingTicketsCache" /> <bean id="abstractTicketCache" abstract="true"
class="org.springframework.cache.ehcache.EhCacheFactoryBean"
p:cacheManager-ref="cacheManager"
p:diskExpiryThreadIntervalSeconds="0"
p:diskPersistent="false"
p:eternal="false"
p:maxElementsInMemory="10000"
p:maxElementsOnDisk="20000"
p:memoryStoreEvictionPolicy="LRU"
p:overflowToDisk="true"
p:bootstrapCacheLoader-ref="ticketCacheBootstrapCacheLoader" /> <!-- MUST use synchronous repl for service tickets for correct behavior. -->
<bean id="serviceTicketsCache"
class="org.springframework.cache.ehcache.EhCacheFactoryBean"
parent="abstractTicketCache"
p:cacheName="cas_st"
p:timeToIdle="0"
p:timeToLive="300"
p:cacheEventListeners-ref="ticketRMISynchronousCacheReplicator" /> <bean id="ticketGrantingTicketsCache"
class="org.springframework.cache.ehcache.EhCacheFactoryBean"
parent="abstractTicketCache"
p:cacheName="cas_tgt"
p:timeToIdle="0"
p:timeToLive="7201"
p:cacheEventListeners-ref="ticketRMIAsynchronousCacheReplicator" /> <bean id="cacheManager"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
p:configLocation="classpath:ehcache-replicated.xml"
p:shared="false"
p:cacheManagerName="ticketRegistryCacheManager" /> <bean id="ticketRMISynchronousCacheReplicator"
class="net.sf.ehcache.distribution.RMISynchronousCacheReplicator"
c:replicatePuts="true"
c:replicatePutsViaCopy="true"
c:replicateUpdates="true"
c:replicateUpdatesViaCopy="true"
c:replicateRemovals="true" /> <!--Richard modify cater to 4.1.3-->
<bean id="ticketRMIAsynchronousCacheReplicator"
class="net.sf.ehcache.distribution.RMIAsynchronousCacheReplicator"
parent="ticketRMISynchronousCacheReplicator"
c:replicatePuts="true"
c:replicatePutsViaCopy="true"
c:replicateUpdates="true"
c:replicateUpdatesViaCopy="true"
c:replicateRemovals="true"
c:replicationInterval="10000"
c:maximumBatchSize="100" /> <bean id="ticketCacheBootstrapCacheLoader"
class="net.sf.ehcache.distribution.RMIBootstrapCacheLoader"
c:asynchronous="true"
c:maximumChunkSize="5000000" /> </beans>
测试
略
参考
参考来源:
结束
最新文章
- 阶段一:AsyncTask的三个属性值和四个步骤
- C# 汉字转拼音(支持GB2312字符集中所有汉字)
- Titanium开发环境搭建第三个坑
- emmet中文文档 (转载)
- javacript序列化表单数据
- bzoj1832
- 远程调试 Azure 上的 Website
- CAS SSO
- InputStream中read()与read(byte[] b)
- HDU 3415 Max Sum of Max-K-sub-sequence(单调队列)
- openwrt 汉化
- Java 线程的创建和启动
- CentOS查看安装包会释放哪些文件
- Swift5 语言参考(四) 表达式
- [转]本地 Windows 计算机密码登录 登录 腾讯云 Linux 实例
- 20155307《网络对抗》MSF基础应用
- 从PHP客户端看MongoDB通信协议(转)
- 研究jenkins集成unittest成图
- [kx]为什么计算机能读懂 1 和 0 ?
- Topcoder SRM 643 Div1 250<;peter_pan>;
热门文章
- 基于Android平台的会议室管理系统具体设计说明书
- jlink下载不进去程序
- [转]Java并发编程:线程池的使用
- postman 脚本学习
- Android Studio中如何设置颜色拾色器工具
- php AES cbc模式 pkcs7 128位加密解密(微信小程序)
- centos 7 执行 groupinstall报错
- SQL Server 2008开启sa账户以及如何用JDBC进行连接
- 解决sweetalert 无故报错 elem.className.replace Uncaught TypeError: Cannot read property &#39;className&#39; of null
- Objective的头文件@interface属性