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 描述符文件中配置应用程序的方式。以下是保留在此文件中的唯一集群配置元素。
distributable-web 子系统弃用了 jboss-web.xml 的 <replication-config> 元素。它通过生成临时分布式 web 会话配置集来提高 <replication-config> 的使用。
您可以通过按名称引用会话管理配置集或提供特定于部署的会话管理配置来覆盖默认的可分发的会话管理行为。如需更多信息,请参阅 Overide Default Distribut Session Management Behavior。
下表论述了如何为 jboss-web.xml 文件中的元素实现类似行为,这些行为现已过时。
| Configuration Element | 更改描述 |
|---|---|
| <max-active-sessions/> |
在以前的版本中,如果会话创建超过 <
在新的实现中, |
| <passivation-config/> | JBoss EAP 7 不再使用此配置元素及其子元素。 |
| <use-session-passivation/> | 在以前的版本中,使用此属性启用 passivation。
在新的实现中,通过为 |
| <passivation-min-idle-time/> | 在以前的版本中,会话需要活跃在成为通过者前的最短时间。这可能导致会话创建失败,即使启用了传递。 新的实现不支持这个逻辑,因此避免这种差异服务(DoS)漏洞。 |
| <passivation-max-idle-time/> | 在以前的版本中,会话会在闲置特定时间后被传递。
新实施只支持 lazy passivation。它不支持强制传递。只有在需要符合 |
| <replication-config/> |
|
| <replication-trigger/> | 在以前的版本中,这个元素用于决定何时触发会话复制。新的实现将这个配置选项替换为单一可靠的策略。如需更多信息,请参阅 JBoss EAP 开发指南中的不可变会话属性。 |
| <use-jk/> |
在以前的版本中,处理给定请求的节点的
在新的实现中,如果定义, |
| <max-unreplicated-interval/> | 在以前的版本中,这个配置选项被设计为一种优化,可防止在没有会话属性改变时复制会话的时间戳。虽然这听起来很好,但实际上它不会阻止任何 RPC,因为会话访问需要缓存事务 RPC,无论任何会话属性都已更改。 在新的实现中,会话的时间戳在每次请求中都会复制。这可防止在故障切换后进行过时的会话元数据。 |
| <snapshot-mode/> |
在以前的版本中,可以将 |
| <snapshot-interval/> |
这只适用于 |
| <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>
<?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
5.20.4. 有状态会话 EJB 集群更改 复制链接链接已复制到粘贴板!
在 JBoss EAP 6 中,您需要以以下方式之一启用有状态会话 Bean(SFSB)的集群行为:
您可以在 session 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 配置文件启动,则 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 单例部署。