4.2. 消息驱动 Beans Controlled Delivery
JBoss EAP 提供三个属性来控制在特定 MDB 上主动接收消息:
4.2.1. delivery Active
消息驱动型 Bean(MDB)的发送活动配置指示 MDB 是否在接收消息。如果 MDB 未接收消息,则消息将根据主题或队列规则保存在队列或主题中。
您可以使用 XML 或注释配置 delivery-group 的 active 属性,您可以在部署后使用管理 CLI 更改其值。默认情况下激活 active 属性,并在部署 MDB 后立即发送消息。
在 jboss-ejb3.xml 文件中配置交付活动
在 jboss-ejb3.xml 文件中,将 active 的 值设置为 false,以表示 MDB 在部署后不会立即收到消息:
<?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:d="urn:delivery-active:1.1"
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>
<d:delivery>
<ejb-name>HelloWorldQueueMDB</ejb-name>
<d:active>false</d:active>
</d:delivery>
</assembly-descriptor>
</jboss:ejb-jar>
如果要将活跃值应用到应用程序中的所有 MDB,您可以使用通配符 * 来代替 ejb-name。
使用注解配置交付活跃
您还可以使用 org.jboss.ejb3.annotation.DeliveryActive 注解。例如:
@MessageDriven(name = "HelloWorldMDB", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/HELLOWORLDMDBQueue"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
@DeliveryActive(false)
public class HelloWorldMDB implements MessageListener {
public void onMessage(Message rcvMessage) {
// ...
}
}
如果使用 Maven 构建项目,请确保在项目的 pom.xml 文件中添加以下依赖项:
<dependency>
<groupId>org.jboss.ejb3</groupId>
<artifactId>jboss-ejb3-ext-api</artifactId>
<version>2.2.0.Final</version>
</dependency>使用管理 CLI 配置交付活跃
在部署后,您可以使用管理 CLI 配置 delivery-group 的 active 属性。这些管理操作动态更改 active 属性的值,为 MDB 启用或禁用交付。如果重新启动服务器,这种更改交付活跃值的方法不会保留。在运行时,连接到您要管理的实例,然后输入您要管理的 MDB 的路径。例如:
进入您要管理的实例:
cd deployment=helloworld-mdb.war/subsystem=ejb3/message-driven-bean=HelloWorldQueueMDB
停止发送到 MDB:
:stop-delivery
开始交付到 MDB:
:start-delivery
查看 MDB Delivery Active 状态
您可以使用管理控制台查看任何 MDB 的当前交付活跃状态:
- 选择 Runtime 选项卡,然后选择相应的服务器。
-
单击 EJB,再选择子资源,如
HelloWorldQueueMDB。
结果
您看到的状态为 Delivery Active: true 或 Delivery Active: false。