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 描述符文件中配置应用程序。以下是此文件中唯一保留的集群配置元素。
distributable-web 子系统弃用了 jboss-web.xml 的 <replication-config> 元素。它通过生成临时分布式 web 会话配置集来提高 <replication-config> 的使用。
您可以通过按名称或提供特定于部署的会话管理配置来覆盖默认的可分布式会话管理行为。如需更多信息,请参阅 覆盖默认的可分布式会话管理行为。
下表论述了如何为 jboss-web.xml 文件中的元素实现类似行为,这些行为现已过时。
| 配置元素 | 更改描述 |
|---|---|
| <max-active-sessions/> |
在以前的版本中,如果会话创建的结果超过 <
在新的实现中, |
| <passivation-config/> | 从 JBoss EAP 7 开始,不再使用此配置元素及其子元素。 |
| <use-session-passivation/> | 在以前的版本中,使用此属性启用 passivation。
在新的实现中,通过为 |
| <passivation-min-idle-time/> | 在以前的版本中,在成为传递候选者前,会话需要最少处于活跃状态。这可能会导致会话创建失败,即使启用了 passivation。 新的实现不支持这个逻辑,因此避免了这个拒绝服务(DoS)漏洞。 |
| <passivation-max-idle-time/> | 在以前的版本中,会话会在闲置特定时间后被传递。
新实施只支持 lazy passivation。它不支持强制传递。只有在需要符合 |
| <replication-config/> |
|
| <replication-trigger/> | 在以前的版本中,这个元素用于决定何时触发会话复制。新的实现将这个配置选项替换为一个可靠的策略。如需更多信息,请参阅 JBoss EAP 7.4 开发指南中的 不可变会话属性。 |
| <use-jk/> |
在以前的版本中,处理给定请求的节点的
在新的实现中,如果定义, |
| <max-unreplicated-interval/> | 在以前的版本中,这个配置选项旨在优化,在没有会话属性更改时防止复制会话的时间戳。虽然这种声音 nice,在实践中,但实际上它不会阻止任何 RPC,因为会话访问需要缓存事务 RPC,无论是否更改了会话属性。 在新的实现中,会话的时间戳在每次请求中都会复制。这可防止在故障切换后进行过时的会话元数据。 |
| <snapshot-mode/> |
在以前的版本中,可以将 |
| <snapshot-interval/> |
这只适用于 |
| <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>
<?xml version="1.0" encoding="UTF-8"?>
<distributable-web xmlns="urn:jboss:distributable-web:1.0">
<session-management name="foo"/>
</distributable-web>
-
或者,在现有的
jboss-all.xml部署描述符中定义目标分布式会话管理配置集:
/META-INF/jboss-all.xml
使用特定于 Deployment 的 Session Management 配置集
如果只有一个 Web 应用使用自定义会话管理配置,您可以在部署描述符本身中定义配置。临时配置与 distributable-web 子系统使用的配置相同。
- 在部署描述符中定义自定义会话管理配置。例如:
/WEB-INF/distributable-web.xml
-
或者,在现有的
jboss-all.xml部署描述符中定义会话管理配置:
/META-INF/jboss-all.xml
7.21.4. 有状态会话 EJB 集群更改 复制链接链接已复制到粘贴板!
在 JBoss EAP 6 中,您需要使用以下方法之一为有状态会话 Bean (SFSB)启用集群行为:
您可以在会话 bean 中添加
org.jboss.ejb3.annotation.Clustered注解。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以将 <
clustered> 元素添加到jboss-ejb3.xml文件中。<c:clustering> <ejb-name>DDBasedClusteredSFSB</ejb-name> <c:clustered>true</c:clustered> </c:clustering>
<c:clustering> <ejb-name>DDBasedClusteredSFSB</ejb-name> <c:clustered>true</c:clustered> </c:clustering>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
从 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 单例部署。