4.2.2. 交付组

交付组提供了一种管理一组 MDB 的交付-主动 状态的方法。MDB 可以属于一个或多个交付组。只有 MDB 所属的所有交付组都处于活动状态时,才会启用消息发送。对于集群单例 MDB,消息发送仅在集群的单例节点中活跃,只有在与 MDB 关联的所有交付组都处于活动状态时。

您可以使用 XML 配置或管理 CLI 将交付组添加到 ejb3 子系统。

在 jboss-ejb3.xml 文件中配置 Delivery Group
<delivery>
  <ejb-name>MdbName<ejb-name>
  <delivery-group>passive</delivery-group>
</delivery>

在服务器端,可以通过将其 active 属性设置为 true 来 启用 delivery-groups,或者将其 active 属性设置为 false 来禁用,如下例所示:

<delivery-groups>
  <delivery-group name="group" active="true"/>
</delivery-groups>
使用管理 CLI 配置交付组

可以使用管理 CLI 更新 交付组 状态。例如:

/subsystem=ejb3/mdb-delivery-group=group:add
/subsystem=ejb3/mdb-delivery-group=group:remove
/subsystem=ejb3/mdb-delivery-group=group:write-attribute(name=active,value=true)

当您在 jboss-ejb3.xml 文件中设置了活动的交付或使用注释时,它会在服务器重新启动时持久保留。但是,当使用管理 CLI 停止或启动交付时,它不会在服务器重启时持久保留。

使用注解配置多个交付组

您可以在属于某个组的每个 MDB 类上使用 org.jboss.ejb3.annotation.DeliveryGroup 注解:

@MessageDriven(name = "HelloWorldQueueMDB", activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/HELLOWORLDMDBQueue"),
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
@DeliveryGroup("delivery-group-1")
@DeliveryGroup("delivery-group-2")
public class HelloWorldQueueMDB implements MessageListener {
...
}