4.2.3. 集群的单例 MDB
当 MDB 被识别为集群单例并部署到集群中时,只有一个节点处于活跃状态。此节点可以按顺序使用消息。当服务器节点出现故障时,来自集群单例 MDB 的活动节点会开始使用消息。
将 MDB 识别为集群的单例
您可以使用以下步骤之一将 MDB 识别为集群单例。
使用 clustered-singleton XML 元素,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在 MDB 类中,使用
@org.jboss.ejb3.annotation.ClusteredSingleton
。此过程不需要额外的服务器配置。您需要在集群环境中运行该服务。
您必须激活整个集群中的 delivery-group
,特别是集群中的所有节点,因为您不知道哪个集群的节点被选为 单例 master
。如果服务器选择要成为 单例 master
的节点,并且该节点没有激活所需的 delivery-group
,则集群中没有节点接收消息。
JBoss EAP 随附 的 messaging-clustering-singleton
快速入门演示了如何将集群与 Apache ActiveMQ Artemis 集成使用。它使用与 helloworld-mdb
快速启动相同的源代码,只有配置有差别才能将它作为集群单例运行。此快速入门中包含两种 Jakarta 消息传递资源:
-
在 Java 命名和目录接口中绑定名为
HELLOWORLDMDBQueue 的
队列,作为java:/queue/HELLOWORLDMDBQueue
-
Java 命名和目录界面中名为
HELLOWORLDMDBTopic
的主题,作为java:/topic/HELLOWORLDMDBTopic 绑定
这两个配置都包含 jboss-ejb3.xml
文件中指定的单例配置:
<c:clustering> <ejb-name>*</ejb-name> <c:clustered-singleton>true</c:clustered-singleton> </c:clustering>
<c:clustering>
<ejb-name>*</ejb-name>
<c:clustered-singleton>true</c:clustered-singleton>
</c:clustering>
<ejb-name>
元素中的通配符 星号 *
表示应用程序中包含的所有 MDB 都将被集群化。因此,集群中只有一个节点会在特定时间激活这些 MDB。如果此活跃节点关闭,集群中的另一个节点将成为 MDB 的活动节点,然后变为单例供应商。
您还可以在 jboss-ejb3.xml
文件中找到交付组的配置:
<d:delivery> <ejb-name>HelloWorldTopicMDB</ejb-name> <d:group>my-mdb-delivery-group</d:group> </d:delivery>
<d:delivery>
<ejb-name>HelloWorldTopicMDB</ejb-name>
<d:group>my-mdb-delivery-group</d:group>
</d:delivery>
在这种情况下,只有一个 MDB HelloWorldTopicMDB
与交付组关联。必须在 ejb3
子系统配置中配置 MDB 使用的所有交付组。可以启用或禁用交付组。如果在集群节点中禁用了交付组,属于该交付组的所有 MDB 分别在相应的群集节点中不可用。在非集群环境中使用交付组时,每当启用交付组时 MDB 就会活跃。
如果交付组与单例提供程序结合使用,只有在该节点启用了交付组时,MDB 才能在单例供应商节点中处于活动状态。否则,MDB 将在那个节点中不活跃,以及集群中的所有其他节点。
有关如何为消息传递集群配置服务器并查看代码示例,请参阅此快速入门中包含的 README.html
文件。
有关如何下载和使用 JBoss EAP 快速入门的信息,请参见 JBoss EAP 入门指南中的使用快速入门示例 章节。