4.2.3. 集群的单例 MDB


当 MDB 被识别为集群单例并部署到集群中时,只有一个节点处于活跃状态。此节点可以按顺序使用消息。当服务器节点出现故障时,来自集群单例 MDB 的活动节点会开始使用消息。

将 MDB 识别为集群的单例

您可以使用以下步骤之一将 MDB 识别为集群单例。

  • 使用 clustered-singleton XML 元素,如下例所示:

    <?xml version="1.1" encoding="UTF-8"?>
    <jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
                   xmlns="http://java.sun.com/xml/ns/javaee"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:c="urn:clustering:1.1"
                   xmlns:d="urn:delivery-active:1.2"
                   xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
                   version="3.1"
                   impl-version="2.0">
        <assembly-descriptor>
            <c:clustering>
                <ejb-name>HelloWorldQueueMDB</ejb-name>
                <c:clustered-singleton>true</c:clustered-singleton>
            </c:clustering>
             <d:delivery>
                    <ejb-name>*</ejb-name>
                    <d:group>delivery-group-1</d:group>
                    <d:group>delivery-group-2</d:group>
            </d:delivery>
        </assembly-descriptor>
    </jboss:ejb-jar>
    Copy to Clipboard Toggle word wrap
  • 在 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>
Copy to Clipboard Toggle word wrap

<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>
Copy to Clipboard Toggle word wrap

在这种情况下,只有一个 MDB HelloWorldTopicMDB 与交付组关联。必须在 ejb3 子系统配置中配置 MDB 使用的所有交付组。可以启用或禁用交付组。如果在集群节点中禁用了交付组,属于该交付组的所有 MDB 分别在相应的群集节点中不可用。在非集群环境中使用交付组时,每当启用交付组时 MDB 就会活跃。

如果交付组与单例提供程序结合使用,只有在该节点启用了交付组时,MDB 才能在单例供应商节点中处于活动状态。否则,MDB 将在那个节点中不活跃,以及集群中的所有其他节点。

有关如何为消息传递集群配置服务器并查看代码示例,请参阅此快速入门中包含的 README.html 文件。

有关如何下载和使用 JBoss EAP 快速入门的信息,请参见 JBoss EAP 入门指南中的使用快速入门示例 章节

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat