Tomcat<Cluster>Liferay_Session共享机制

引言:

       随着互联网应用的用户量不断激增,并发的需求越来越受到开发者的关注,对于高访问量、高并发量的网站或web应用来说,目前最常见的解决方案应该就是利用负载均衡进行server集群, 集群之后比如我们有N个Tomcat,用户在访问我们的网站时有可能第一次请求分发到tomcat1下,而第二次请求又分发到了tomcat2下,有过web开发经验的朋友都知道这时session不一致会导致怎样的后果,所以我们需要解决一下多个tomcat之间session共享的问题.

开发工具:

1:Java应用服务器:Tomcat7.0.42.

2:软件环境:JDK 1.80/Mysql5.1/Windows 7.

3:技术类型:Spring、Liferay、Hibernate.

步骤:

在本次实现Session共享的方法中,我们采用的是tomcat自带的集群配置(<Cluster>).

首先我们需要对Tomcat的配置文件server.xml中<Engine defaultHost=”localhost”>添加<Cluster>属性:列如

<Cluster>相关参数的介绍:

className表示tomcat集群时,之间相互传递信息使用那个类来实现信息之间的传递.

channelSendOptions可以设置为2、4、8、10,每个数字代表一种方式

2 = Channel.SEND_OPTIONS_USE_ACK(确认发送)

4 =Channel.SEND_OPTIONS_SYNCHRONIZED_ACK(同步发送)

8 =Channel.SEND_OPTIONS_ASYNCHRONOUS(异步发送)

在异步模式下,可以通过加上确认发送(Acknowledge)来提高可靠性,此时channelSendOptions设为10         

expireSessionsOnShutdown-设置为true时,一个节点关闭,将导致集群下的所有Session失效

notifyListenersOnReplication-集群下节点间的Session复制、删除操作,是否通知session listeners

className-指定Membership使用的类

address-组播地址

port-组播端口

frequency-发送心跳(向组播地址发送UDP数据包)的时间间隔(单位:ms)。默认值为500

dropTime-Membership在dropTime(单位:ms)内未收到某一节点的心跳,则将该节点从可用节点列表删除。默认值为3000

Receiver: 接收器,负责接收消息

address-接收消息的地址

port-接收消息的端口

autoBind-端口的变化区间, 如果port为4000,autoBind为100,接收器将在4000-4099间取一个端口,进行监听.

selectorTimeout-NioReceiver内轮询的超时时间

maxThreads-线程池的最大线程数

注:在其余Tomact中只需要将port改为其他值即可,(同时服务器的端口也必须不一样,列如(服务器1:(smartcloud:8180)、服务器2(Tomcat 7:8888))).

其次是我们可以创建个简单的Liferay项目(Pay)进行验证,验证代码如下:

为了验证Session是否能共享我采用了不同Tomcat下部署不同的验证代码;


     备注:为了让项目能够使用< Cluster >我们需要在项目中的web.xml添加<distributable/> element

 


那么Tomcat自带的集群配置就基本完成了,在验证多个Tomcat是否应用了集群,在bin中使用startup.bat出现一句

(用startup.bat启动Tomcat是避免Eclipse自带的server.xml覆盖Tomcat的server.xml配置):

就表明集群已经应用到了该Tomacat!

接下来就是对Liferay进行配置,在这里两个Tomcat服务器用到的liferay数据库都是同一个,在这里面我们需要强调的一点是,要实现Session共享,两个服务器访问地址除了端口不一样,其余都应该相同(因为项目是同一个项目)!所以在对liferay配置的时候我们需要建立相同的Site、访问的地址也必须相同例如:

1: http://localhost:8180/web/guest/smartcloud-compute-payg.

2:http://localhost:8888/web/guest/smartcloud-compute-payg.

 

 

 

测试后结果如下:

Tomcat:Tomcat 7



Tomcat:smartcloud


从以上两张图可看出Session通过这种方式是可以达到共享的目的的.

 

总结:

1:server.xml需要配置<Cluster>标签.                                                      

2:Tomcat所加载的项目web.xml中需要添加<distributable/>.              

3:Liferay中需要添加相同的Site、以及相同的访问地址.                          

4:测试的时候加载bin下面的startup.bat避免server.xml被Eclipse给覆盖 .
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值