7.21. 应用程序集群更改


本节概述将应用从 JBoss EAP 6 迁移到 JBoss EAP 8 所需的集群更改。此外,本节描述了集群更改可能会影响您的应用程序迁移到 JBoss EAP 8.0。

7.21.1. 新集群功能概述

下表介绍了将应用从 JBoss EAP 6 迁移到 JBoss EAP 8.0 时应注意的一些新集群功能。

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

7.21.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> 的使用。

您可以通过按名称或提供特定于部署的会话管理配置来覆盖默认的可分布式会话管理行为。如需更多信息,请参阅 覆盖默认的可分布式会话管理行为

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

Expand
配置元素更改描述

<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/>

在以前的版本中,在成为传递候选者前,会话需要最少处于活跃状态。这可能会导致会话创建失败,即使启用了 passivation。

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

<passivation-max-idle-time/>

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

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

<replication-config/>

distributable-web 子系统弃用此元素。如需更多信息,请参阅 JBoss EAP 7.4 开发指南中的 用于分布式 Web 会话配置的 distribut-web 子系统和 覆盖默认的可分布式会话管理 行为

<replication-trigger/>

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

<use-jk/>

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

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

<max-unreplicated-interval/>

在以前的版本中,这个配置选项旨在优化,在没有会话属性更改时防止复制会话的时间戳。虽然这种声音 nice,在实践中,但实际上它不会阻止任何 RPC,因为会话访问需要缓存事务 RPC,无论是否更改了会话属性。

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

<snapshot-mode/>

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

<snapshot-interval/>

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

<session-notification-policy/>

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

在新的实现中,此行为是规范驱动的,不可配置。

这个新实施还支持直写缓存存储和仅传递缓存存储。通常,直写缓存存储与无效缓存结合使用。与无效缓存一起使用时,JBoss EAP 6 中的 Web 会话集群实施不正确。

7.21.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

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

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

  • 您可以在会话 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 配置文件启动,SFSB 的状态将自动复制。您可以使用以下方法之一禁用此默认行为:

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

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

7.21.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 7.4 开发指南中的 集群服务的公共 API

7.21.6. 迁移集群 HA 单例

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

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

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部