激活规范属性
激活规范用于配置消息传递到 MDB。ejb-jar.xml 部署描述符需要包含一个
<activation-config>
<activation-config-property>
<activation-config-property-name>destination</activation-config-property-name>
<activation-config-property-value>queue.testQueue</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>destinationType</activation-config-property-name>
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
</activation-config-property>
</activation-config>
此处,destination 的值为所需目标的物理名称。destinationType 的值为定义目标类型的类名。它应该是 javax.jms.Queue 或 javax.jms.Topic。
可以配置的激活规范属性如下
属性名称 | 必需 | 默认值 | 描述 |
---|---|---|---|
acknowledgeMode | 否 | 自动确认 | 要使用的 JMS 确认模式。有效值为:自动确认或 Dups-ok-acknowledge |
clientId | 否 | 在资源适配器中设置 | 要使用的 JMS 客户端 ID(仅在持久主题中真正需要) |
destinationType | 是 | null | 目标类型;队列或主题 |
destination | 是 | null | 目标名称(队列或主题名称) |
enableBatch | 否 | false | 用于启用事务批处理以提高性能 |
maxMessagesPerBatch | 否 | 10 | 每个事务批处理的消息数量 |
maxMessagesPerSessions | 否 | 10 | 这实际上是订阅的预取大小。(是的,命名不好)。 |
maxSessions | 否 | 10 | 要使用的并发会话的最大数量 |
messageSelector | 否 | null | 用于订阅的 JMS 消息选择器,以执行基于内容的路由,过滤消息 |
noLocal | 否 | false | 仅在主题订阅中需要;指示是否应在订阅中包含本地发布的消息 |
password | 否 | 在资源适配器中设置 | JMS 连接的密码 |
subscriptionDurability | 否 | NonDurable | 是否需要持久(主题)订阅。有效值为:Durable 或 NonDurable |
subscriptionName | 否 | null | 持久订阅的名称。仅用于持久主题,并与 clientID 结合使用以唯一标识持久主题订阅 |
userName | 否 | 在资源适配器中设置 | JMS 连接的用户 |
useRAManagedTransaction | 否 | false | 通常,资源适配器将消息传递到由容器管理的端点。通常,此容器希望成为控制传入消息传递的事务的容器。但是,有时您希望传递到更简单的容器系统,该系统不会控制传入事务。在这种情况下,如果您将 useRAManagedTransaction 设置为 true,则资源适配器将在没有从 MessageListener 生成异常的情况下提交事务,并在抛出异常时回滚。 |
initialRedeliveryDelay | 否 | 1000 | 重新传递开始之前的延迟。也可以在 ResourceAdapter 上配置 |
maximumRedeliveries | 否 | 5 | 重新传递的最大次数,或 -1 表示没有最大次数。也可以在 ResourceAdapter 上配置 |
redeliveryBackOffMultiplier | 否 | 5 | 如果启用指数后退,要使用的乘数。也可以在 ResourceAdapter 上配置 |
redeliveryUseExponentialBackOff | 否 | false | 启用指数后退。也可以在 ResourceAdapter 上配置 |
useJndi | 否 | false | 当为 true 时,将 destination 作为 jndi 名称使用 |
最大化 MDB 的吞吐量
如果您想最大化 MDB 的吞吐量,您应该将 maxSessions 设置为相当大的值以提高并发性。然后将 maxMessagesPerSessions 设置为一个较大的值(例如)1000。
这假设您有大量可用的消息(例如超过 maxSessions * maxMessagesPerSession)。否则,预取 最终会 使其他使用者饿死。
因此,如果您没有那么多的可用消息,但它们可能需要一段时间才能处理,那么您可能希望将 maxMessagesPerSessions 设置为较低的值。