You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在同一Tomcat实例的不同Web应用中部署Apache Ignite服务端与客户端节点?

实现方案:基于Ignite的跨Web应用会话复制(单集群模式)

一、核心前提

确保webapp1(服务端集群)和webapp2(客户端节点)使用完全相同的集群名称,这是两者加入同一集群的关键。

二、Webapp1(Ignite服务端集群节点)配置

  1. 添加Ignite依赖
    在webapp1的构建文件中引入Ignite核心及Web模块依赖(以Maven为例):

    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-core</artifactId>
        <version>你的Ignite版本号</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-web</artifactId>
        <version>你的Ignite版本号</version>
    </dependency>
    
  2. 编写服务端Ignite配置
    在WEB-INF目录下创建ignite-server-config.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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                               http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
            <!-- 统一集群名称,必须和webapp2保持一致 -->
            <property name="clusterName" value="shared-session-cluster"/>
            <!-- 设置为服务端节点 -->
            <property name="clientMode" value="false"/>
            <!-- TCP/IP发现配置,让客户端能找到集群 -->
            <property name="discoverySpi">
                <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                    <property name="ipFinder">
                        <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
                            <property name="addresses">
                                <list>
                                    <!-- 填写webapp1所在服务器的IP+默认端口47500 -->
                                    <value>192.168.1.10:47500</value>
                                </list>
                            </property>
                        </bean>
                    </property>
                </bean>
            </property>
            <!-- 可选:开启持久化防止会话丢失 -->
            <property name="dataStorageConfiguration">
                <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
                    <property name="defaultDataRegionConfiguration">
                        <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                            <property name="persistenceEnabled" value="true"/>
                        </bean>
                    </property>
                </bean>
            </property>
        </bean>
    </beans>
    
  3. 配置Web会话过滤器
    在web.xml中添加Ignite会话过滤器,关联服务端配置:

    <filter>
        <filter-name>IgniteWebSessionFilter</filter-name>
        <filter-class>org.apache.ignite.cache.websession.IgniteWebSessionFilter</filter-class>
        <init-param>
            <param-name>cfgPath</param-name>
            <param-value>/WEB-INF/ignite-server-config.xml</param-value>
        </init-param>
        <!-- 会话缓存名称,webapp2需使用相同名称 -->
        <init-param>
            <param-name>cacheName</param-name>
            <param-value>web-sessions-cache</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>IgniteWebSessionFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

三、Webapp2(Ignite客户端节点)配置

  1. 添加同版本依赖
    和webapp1使用完全相同版本的Ignite核心及Web模块依赖。

  2. 编写客户端Ignite配置
    在WEB-INF目录下创建ignite-client-config.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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                               http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
            <!-- 与服务端集群名称完全一致 -->
            <property name="clusterName" value="shared-session-cluster"/>
            <!-- 设置为客户端节点 -->
            <property name="clientMode" value="true"/>
            <!-- 指向服务端的发现地址 -->
            <property name="discoverySpi">
                <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                    <property name="ipFinder">
                        <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
                            <property name="addresses">
                                <list>
                                    <value>192.168.1.10:47500</value>
                                </list>
                            </property>
                        </bean>
                    </property>
                </bean>
            </property>
        </bean>
    </beans>
    
  3. 配置Web会话过滤器
    在web.xml中添加过滤器,关联客户端配置并使用相同缓存名称:

    <filter>
        <filter-name>IgniteWebSessionFilter</filter-name>
        <filter-class>org.apache.ignite.cache.websession.IgniteWebSessionFilter</filter-class>
        <init-param>
            <param-name>cfgPath</param-name>
            <param-value>/WEB-INF/ignite-client-config.xml</param-value>
        </init-param>
        <init-param>
            <param-name>cacheName</param-name>
            <param-value>web-sessions-cache</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>IgniteWebSessionFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

四、关键注意事项

  • 版本统一:webapp1和webapp2的Ignite版本必须完全一致,避免兼容性问题。
  • 网络连通:确保webapp2服务器能访问webapp1的Ignite端口(默认47500、47100),防火墙需开放对应端口。
  • 对象序列化:会话中存放的自定义对象必须实现Serializable接口,否则无法跨节点复制。
  • 缓存自定义:如需调整会话缓存的过期时间、容量等参数,仅需在服务端配置中添加缓存配置,客户端会自动同步使用。

内容的提问来源于stack exchange,提问作者Lakshmikantha Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 20:16:07