啟動規格屬性
啟動規格 (Activation Spec) 用於配置訊息傳遞至 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 確認模式。有效值為:Auto-acknowledge 或 Dups-ok-acknowledge |
clientId | 否 | 在資源配接器中設定 | 要使用的 JMS 客戶端 ID(僅在持久性主題時才真正需要) |
destinationType | 是 | 空值 | 目的地的類型:佇列或主題 |
destination | 是 | 空值 | 目的地名稱(佇列或主題名稱) |
enableBatch | 否 | 否 | 用於啟用交易批次處理以提高效能 |
maxMessagesPerBatch | 否 | 10 | 每個交易批次中的訊息數 |
maxMessagesPerSessions | 否 | 10 | 這實際上是訂閱的預取大小。(是的,命名不佳)。 |
maxSessions | 否 | 10 | 要使用的並行工作階段的最大數 |
messageSelector | 否 | 空值 | 要在訂閱上使用的 JMS 訊息選擇器,以執行基於內容的路由篩選訊息 |
noLocal | 否 | 否 | 僅適用於主題訂閱;表示是否應將本地發佈的訊息包含在訂閱中 |
password | 否 | 在資源配接器中設定 | JMS 連線的密碼 |
subscriptionDurability | 否 | 非持久 | 是否需要持久性(主題)訂閱。有效值為:Durable 或 NonDurable |
subscriptionName | 否 | 空值 | 持久訂閱者的名稱。僅適用於持久主題,並與 clientID 組合使用以唯一識別持久主題訂閱 |
userName | 否 | 在資源配接器中設定 | JMS 連線的使用者 |
useRAManagedTransaction | 否 | 否 | 通常,資源配接器將訊息傳遞到由容器管理的端點。通常,此容器希望控制傳入訊息正在傳遞的交易。但有時,您想要傳遞到一個較簡單的容器系統,該系統不會控制傳入的交易。在這種情況下,如果將 useRAManagedTransaction 設定為 true,則如果 MessageListener 未產生任何例外,則資源配接器將提交交易,如果拋出例外,則會回滾交易。 |
initialRedeliveryDelay | 否 | 1000 | 重新傳遞開始前的延遲。也可以在 ResourceAdapter 上配置 |
maximumRedeliveries | 否 | 5 | 最大重新傳遞次數,或 -1 表示不限制最大次數。也可以在 ResourceAdapter 上配置 |
redeliveryBackOffMultiplier | 否 | 5 | 如果啟用指數退避,則要使用的乘數。也可以在 ResourceAdapter 上配置 |
redeliveryUseExponentialBackOff | 否 | 否 | 啟用指數退避。也可以在 ResourceAdapter 上配置 |
useJndi | 否 | 否 | 當為 true 時,將目的地作為 jndi 名稱使用 |
最大化 MDB 的輸送量
如果要最大化 MDB 的輸送量,您應該將 maxSessions 設定為相當大的值以增加並行性。然後將 maxMessagesPerSessions 設定為較大的值(例如)1000。
這假設您有大量可用的訊息(例如,大於 maxSessions * maxMessagesPerSession)。否則,預取將最終使其他消費者陷入飢餓。
因此,如果您沒有那麼多可用的訊息,但它們可能需要一些時間來處理,那麼您可能需要設定較低的 maxMessagesPerSessions 值