ActiveMQ のキューのコンシューマーとして機能する Jboss 7 アプリケーションに MDB があります。これは、JBoss からの接続方法です。
/subsystem=resource-adapters/resource-adapter=activemq-rar-5.6.0.rar/config-properties="ServerUrl":add(value="tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1")
MDB では、これらは注釈です。
@MessageDriven(name = "MyConsumerMessageBean", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "myQueue"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "maxSessions", propertyValue="2")})
@ResourceAdapter(value = "activemq-rar-5.6.0.rar")
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
JBoss が Active MQ に接続すると、jms.prefetchPolicy.queuePrefetch=1 の値が JBoss サーバー ログに示されているように、接続試行で activeMQ サーバーに渡されることがわかります。
2014-08-28 21:33:04,183 INFO [org.apache.activemq.ra.ActiveMQEndpointWorker] (default-short-running-threads-threads - 3) Successfully established connection to broker [tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1]
しかし、ActiveMQ キュー画面を見て、このコンシューマーにドリルダウンすると、PreFetch Max Pending 列の値が 20 であることがわかります。この数値 20 はどこから来たのか、ActiveMQ で値 1 が受け入れられないのはなぜですか。
また、同じメカニズムを介して他の値「jms.prefetchPolicy.all=1」を設定しようとしましたが、それも機能しませんでした。私はJBoss AS 7.1.1 FinalおよびActiveMQ 5.6.0を使用しています
ありがとう