目前我正在开发模块以显示我的应用程序中的在线用户列表。我正在使用彗星流媒体技术。当用户登录时,我将数据放入地图中,然后在消息队列中发送数据。现在,消息队列存储在servlet上下文中。
现在我遇到的问题是它在本地环境中工作但是它在生产环境中不起作用,因为在生产环境中我已经设置了tomcat集群。因此,在tomcat 2中无法访问tomcat 1的servlet上下文中的数据集。
我已经开发了模块,但没有办法解决上述问题。我谷歌发现tomcat不支持上下文复制。
我怀疑在tomcat集群Web应用程序中将创建多少个JVM实例。例如,我有两个tomcat集群。
答案 0 :(得分:1)
我不会使用servlet上下文来存储集群的数据。常见的模式是使用数据库来处理必须在不同服务器之间共享的数据。
对于您的用例,不需要在不同的运行之间保持值,因此数据库不一定是一个很好的解决方案,即使它很容易设置。恕我直言你需要它只是一个共享数据缓存或更好的内存数据网格。 hazelcast应该很容易满足您的要求。如果我正确理解它们,你需要的是一个分布式映射,其中node_id,session_id作为键(或者简称session_id),以及用户对象作为值。
答案 1 :(得分:0)
在tomcat7中,这需要编写一个自定义阀来强制复制,在tomcat 6中也是如此。请参阅Is there a useDirtyFlag option for Tomcat 6 cluster configuration?以了解如何执行此操作。