5.20. 应用程序集群更改


5.20.1. 新集群功能概述

以下列表介绍了在将应用从 JBoss EAP 6 迁移到 JBoss EAP 7 时要了解的一些新的集群功能。

  • JBoss EAP 7 引入了一个新的公共 API,用于构建可显著简化流程的单例服务。有关单例服务的信息,请参阅 JBoss EAP 开发指南中的 HA 单例服务
  • 可以配置单例部署,以一次仅在集群的单个节点上部署和启动。有关更多信息,请参阅 JBoss EAP 开发指南中的 HA 单例部署
  • 现在,您可以定义集群单例 MDB。有关更多信息,请参阅 JBoss EAP 开发 Jakarta Enterprise Beans 中的 Clustered Singleton MDB
  • JBoss EAP 7 包括 Undertow mod_cluster 实施。这提供了一个纯 Java 负载平衡解决方案,不需要 httpd Web 服务器。如需更多信息,请参阅 JBoss EAP 配置指南中的将 JBoss EAP 配置为前端 Load Balancer

本节的其余部分论述了集群更改将如何影响应用程序迁移到 JBoss EAP 7 的迁移。

5.20.2. Web Session 集群更改

JBoss EAP 7 引入了一个新的 Web 会话集群实施。它取代了以前的实施,它与旧的 JBoss Web 子系统源代码紧密耦合。

新的 Web 会话集群实施会影响在 jboss-web.xml JBoss EAP 专有 Web 应用 XML 描述符文件中配置应用程序的方式。以下是保留在此文件中的唯一集群配置元素。

<jboss-web>
  ...
  <max-active-sessions>...</max-active-sessions>
  ...
  <replication-config>
    <replication-granularity>...</replication-granularity>
    <cache-name>...</cache-name>
  </replication-config>
  ...
</jboss-web>
Copy to Clipboard Toggle word wrap

distributable-web 子系统弃用了 jboss-web.xml<replication-config> 元素。它通过生成临时分布式 web 会话配置集来提高 <replication-config> 的使用。

您可以通过按名称引用会话管理配置集或提供特定于部署的会话管理配置来覆盖默认的可分发的会话管理行为。如需更多信息,请参阅 Overide Default Distribut Session Management Behavior

下表论述了如何为 jboss-web.xml 文件中的元素实现类似行为,这些行为现已过时。

Expand
Configuration Element更改描述

<max-active-sessions/>

在以前的版本中,如果会话创建超过 < max-active-sessions/> 指定的值,则会话创建会失败

在新的实现中,<max-active-sessions/> 用于启用会话传递。如果会话创建将导致活跃会话的数量超过 & lt;max-active-sessions />,则会话管理器最旧的会话会传给新会话腾出空间。

<passivation-config/>

JBoss EAP 7 不再使用此配置元素及其子元素。

<use-session-passivation/>

在以前的版本中,使用此属性启用 passivation。

在新的实现中,通过为 <max-active-sessions/> 指定非负值来启用 passivation。

<passivation-min-idle-time/>

在以前的版本中,会话需要活跃在成为通过者前的最短时间。这可能导致会话创建失败,即使启用了传递。

新的实现不支持这个逻辑,因此避免这种差异服务(DoS)漏洞。

<passivation-max-idle-time/>

在以前的版本中,会话会在闲置特定时间后被传递。

新实施只支持 lazy passivation。它不支持强制传递。只有在需要符合 <max-active-sessions/> 时,会话才会被传递。

<replication-config/>

distributable-web 子系统弃用此元素。如需更多信息,请参阅分布式 Web 会话配置的 distribut-web 子系统覆盖默认分布式会话管理行为

<replication-trigger/>

在以前的版本中,这个元素用于决定何时触发会话复制。新的实现将这个配置选项替换为单一可靠的策略。如需更多信息,请参阅 JBoss EAP 开发指南中的不可变会话属性

<use-jk/>

在以前的版本中,处理给定请求的节点的 instance-id 附加到 jsessionid 中,供负载均衡器(如 mod_jk、mod_proxy_balancer、mod_cluster)使用,具体取决于为 < use-jk/> 指定的值。

在新的实现中,如果定义,instance-id 始终附加到 jsessionid

<max-unreplicated-interval/>

在以前的版本中,这个配置选项被设计为一种优化,可防止在没有会话属性改变时复制会话的时间戳。虽然这听起来很好,但实际上它不会阻止任何 RPC,因为会话访问需要缓存事务 RPC,无论任何会话属性都已更改。

在新的实现中,会话的时间戳在每次请求中都会复制。这可防止在故障切换后进行过时的会话元数据。

<snapshot-mode/>

在以前的版本中,可以将 <snapshot-mode/> 配置为 INSTANTINTERVAL。Infinispan 的异步复制使该配置选项变得过时。

<snapshot-interval/>

这只适用于 <snapshot-mode>INTERVAL</snapshot-mode>。因为 <snapshot-mode /> 已过时,所以这个选项现在也已过时。

<session-notification-policy/>

在以前的版本中,此属性指定的值定义了用于触发会话事件的策略。

在新的实现中,这种行为由规范驱动的,不可配置。

这个新的实现也支持直写缓存存储以及只激活的缓存存储。通常,将 write-through 缓存存储与无效的缓存结合使用。与内部缓存一同使用时,JBoss EAP 6 中的 Web 会话集群实施无法正常工作。

5.20.3. 覆盖默认的总会话管理行为

您可以使用以下方法之一覆盖默认的可分布式会话管理行为:

  • 按名称引用会话管理配置集
  • 提供特定于部署的会话管理配置
引用现有的会话管理配置集
  • 要使用现有的分布式会话管理配置集,请在应用程序的 /WEB-INF 目录中包含一个 distributable-web.xml 部署描述符。例如:

/WEB-INF/distributable-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<distributable-web xmlns="urn:jboss:distributable-web:1.0">
    <session-management name="foo"/>
</distributable-web>
Copy to Clipboard Toggle word wrap
  • 或者,在现有的 jboss-all.xml 部署描述符中定义目标分布式会话管理配置集:

/META-INF/jboss-all.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss xmlns="urn:jboss:1.0">
    <distributable-web xmlns="urn:jboss:distributable-web:1.0">
        <session-management name="foo"/>
    </distributable-web>
</jboss>
Copy to Clipboard Toggle word wrap
使用特定于 Deployment 的 Session Management 配置集

如果只有一个 Web 应用使用自定义会话管理配置,您可以在部署描述符本身中定义配置。临时配置与 distributable-web 子系统使用的配置相同。

  • 在部署描述符中定义自定义会话管理配置。例如:

    /WEB-INF/distributable-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<distributable-web xmlns="urn:jboss:distributable-web:1.0">
    <infinispan-session-management cache-container="foo" cache="bar" granularity="SESSION">
        <primary-owner-affinity/>
    </infinispan-session-management>
</distributable-web>
Copy to Clipboard Toggle word wrap
  • 或者,在现有的 jboss-all.xml 部署描述符中定义会话管理配置:

/META-INF/jboss-all.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss xmlns="urn:jboss:1.0">
    <distributable-web xmlns="urn:jboss:distributable-web:1.0">
        <infinispan-session-management cache-container="foo" cache="bar" granularity="ATTRIBUTE">
            <local-affinity/>
        </infinispan-session-management>
    </distributable-web>
</jboss>
Copy to Clipboard Toggle word wrap

5.20.4. 有状态会话 EJB 集群更改

在 JBoss EAP 6 中,您需要以以下方式之一启用有状态会话 Bean(SFSB)的集群行为:

  • 您可以在 session bean 中添加 org.jboss.ejb3.annotation.Clustered 注解。

    @Stateful
    @Clustered
    public class MyBean implements MySessionInt {
    
       public void myMethod() {
          //
       }
    }
    Copy to Clipboard Toggle word wrap
  • 您可以将 < clustered&gt; 元素添加到 jboss-ejb3.xml 文件中。

    <c:clustering>
      <ejb-name>DDBasedClusteredSFSB</ejb-name>
      <c:clustered>true</c:clustered>
    </c:clustering>
    Copy to Clipboard Toggle word wrap

JBoss EAP 7 不再需要您启用集群行为。默认情况下,如果服务器使用 HA 配置文件启动,则 SFSBs 的状态将自动复制。您可以使用以下方法之一禁用这个默认行为:

  • 您可以使用 @Stateful(passivationCapable=false) 来禁用单个有状态会话的默认行为,该行为是 EJB 3.2 规范的新。
  • 您可以在服务器配置中 ejb3 子系统的配置全局禁用此行为。
注意

如果 @Clustered 注释没有从应用中删除,它将被简单地忽略,不会影响应用的部署。

5.20.5. 集群服务更改

在 JBoss EAP 6 中,集群服务的 API 位于私有模块中,且不被支持。

JBoss EAP 7 引入了应用程序使用的公共集群服务 API。新服务的设计成轻便、易于注入,并且不需要外部依赖项。

  • 新的 org.wildfly.clustering.group.Group 接口提供了对当前集群状态的访问,并允许侦听集群成员资格更改。
  • 新的 org.wildfly.clustering.dispatcher.CommandDispatcher 接口允许在所有这些或所选节点子集中运行代码。

这些服务取代了之前版本中提供的类似 API,即 JBoss EAP 5 中的 HAPartition,以及 JBoss EAP 6 中的 GroupCommunicationService, GroupMembershipNotifier, 和 GroupRpcDispatcher

如需更多信息,请参阅 JBoss EAP 开发指南中的集群服务公共 API

5.20.6. 迁移集群 HA 单例

在 JBoss EAP 6 中,没有可用于集群范围的 HA 单例服务的公共 API。如果您使用了私有 org.jboss.as.clustering.singleton.* 类,在将应用迁移到 JBoss EAP 7 时,您必须更改您的代码以使用新的公共 org.wildfly.clustering.singleton.* 软件包。

有关 HA 单例服务的更多信息,请参阅 JBoss EAP 开发指南中的 HA 单例服务。有关 HA 单例部署的信息,请参阅 JBoss EAP 开发指南中的 HA 单例部署

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat