1

一度に 10 個を超えるメッセージが処理されるように Geronimo/ActiveMQ を構成することができません。

このメーリング リストの提案を試してみましたが、 を 10 より大きい値に設定しmaxSessionsても効果はありません。それよりも低い値に設定すると効果がありますが...

また、InstanceLimit設定で設定しようとしました:

<module name="org.apache.geronimo.configs/j2ee-server/2.1.4/car">
    <gbean name="org.apache.geronimo.configs/j2ee-server/2.1.4/car?ServiceModule=org.apache.geronimo.configs/j2ee-server/2.1.4/car,j2eeType=GBean,name=CustomPropertiesGBean" 
           gbeanInfo="org.apache.geronimo.system.properties.SystemProperties">
        <attribute name="systemProperties">Default\ MDB\ Container.InstanceLimit=50</attribute>
    </gbean>
</module>
4

1 に答える 1

1

よし、やっと手に入れた!ここに長い説明があります。うまくいけば、誰かにも役立つでしょう。

これらの例をいじくり回した後、ActiveMQ のアクティブ化パラメーターが上限を制限していないことがわかりましたが、並列インスタンスを減らすことができます。

<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-property>
    <activation-config-property-name>maxSessions</activation-config-property-name>
    <activation-config-property-value>3</activation-config-property-value>
</activation-config-property>
<activation-config-property>
    <activation-config-property-name>maxMessagesPerSessions</activation-config-property-name>
    <activation-config-property-value>2</activation-config-property-value>
</activation-config-property>

そこで、オープンソースの道を進むことにしました! 関連するコンポーネントの必要なすべてのソース コードを添付した後:

  • ジェロニモ
  • アクティブMQ
  • OpenEJB

InstanceLimit は、明示的に照会される GBean プロパティであることがわかりました。デフォルト値は 10 で、Geronimo でハードコーディングされています。デバッガーでこの値を微調整することで、希望どおりの結果が得られました!

しかし、InstanceLimit を設定することは、これを Geronimos config.xml に追加することを提案したメーリング リストでも提案されました。

<module name="org.apache.geronimo.configs/j2ee-server/2.1.4/car">
    <gbean name="org.apache.geronimo.configs/j2ee-server/2.1.4/car?ServiceModule=org.apache.geronimo.configs/j2ee-server/2.1.4/car,j2eeType=GBean,name=CustomPropertiesGBean" 
           gbeanInfo="org.apache.geronimo.system.properties.SystemProperties">
        <attribute name="systemProperties">Default\ MDB\ Container.InstanceLimit=50</attribute>
     </gbean>
</module>

(もちろん正しいバージョン番号で)しかし、これは何の効果もありませんでした。このヒントを注意深く読み直した後:

作成されるインスタンスの数が利用可能な AMQ セッションの数と一致するように、MdbContainer の InstanceLimit プロパティを 0 に設定してみてください。これを設定するには、これをシステム プロパティとして設定する必要があります。プロパティは containerId.InstanceLimit である必要があります。containerId は次の形式です。

<artifactId>.<Resource Group Name>-<listener interface>

例: org.apache.geronimo.configs/activemq-ra/2.2-SNAPSHOT/car.ActiveMQ RA-javax.jms.MessageListener

  • <artifactId>= jms RA の artifactId
  • <Resource Group Name>- RA の作成中に指定したリソース グループ名
  • <listener interface>- この場合は javax.jms.MessageListener

org.apache.geronimo.openejb.OpenEjbSystemGBeanGeronimos のコードと実行時の状態を調べると、309 行目の InstanceLimit を探していることがわかりました。この ID はサンプル プロジェクトにありました。

org.apache.geronimo.configs/activemq-ra/2.2.1/car.ActiveMQ RA-javax.jms.MessageListener

この情報を装備して、私はこれを試しました:

<module name="org.apache.geronimo.configs/j2ee-server/2.2.1/car">
    <gbean name="org.apache.geronimo.configs/j2ee-server/2.2.1/car?ServiceModule=org.apache.geronimo.configs/j2ee-server/2.2.1/car,j2eeType=GBean,name=CustomPropertiesGBean" 
               gbeanInfo="org.apache.geronimo.system.properties.SystemProperties">
        <attribute name="systemProperties">org.apache.geronimo.configs/activemq-ra/2.2.1/car.ActiveMQ\ RA-javax.jms.MessageListener.InstanceLimit=50</attribute>
    </gbean>
</module>

そしてそれはうまくいきました!これにより、デバッグ セッションから使用された ID を取得しました...これで、InstanceLimit=0 を設定し、maxSessionsActiveMQ のプロパティによって並列作業 MDB を構成できるようになりました。

于 2012-10-18T08:34:46.710 に答える