0

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を使用しています

ありがとう

4

2 に答える 2

1

JBoss EAP では、通常のようにブローカー URL からパラメーターを取得しない org.apache.activemq.ra.ActiveMQManagedConnectionFactory が設定されます。プリフェッチを構成するには、次の config-properties を resource-adapter に追加できます。

<config-property name="QueuePrefetch">20</config-property>
<config-property name="TopicPrefetch">20</config-property>
<config-property name="DurableTopicPrefetch">20</config-property>
<config-property name="OptimizeDurableTopicPrefetch">20</config-property>
<config-property name="QueueBrowserPrefetch">20</config-property>
<config-property name="InputStreamPrefetch">20</config-property> 
于 2016-10-20T19:20:19.533 に答える
1

まず、消費者レベルで設定していないことを確認してください (たとえば、 YOUR.QUEUE?consumer.prefetchSize=20 )。

それは、接続ファクトリで設定した場所をオーバーライドする必要がある唯一の場所です。

それ以外の場合は、新しいバージョンの AMQ の使用も検討します。私の記憶が正しければ、ブローカがプリフェッチ値を尊重しない原因となったバグがありました。

コンシューマー レベルで見つからなかった場合は、activemq.xml でプリフェッチ 20 の宛先ポリシーがあるかどうかを確認します。送信先ポリシー レベルで設定すると、ブローカーのデフォルト (1000) が上書きされますが、URI 引数はその設定を上書きする必要があります。これは、私が言及した問題に直面しているという検証になる可能性があります。

于 2014-08-29T19:31:22.670 に答える