我无法配置Geronimo / ActiveMQ,以便一次处理10个以上的消息。
我尝试了mailing list的建议,
但将maxSessions
设置为高于10的值不会产生任何影响。将它设置为低于该值的东西虽然有效...
我还想通过设置{/ p>来设置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>
答案 0 :(得分:1)
好的,最后我明白了!这是一个冗长的解释,希望也可以帮助别人。
在修改these examples之后,我发现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>
所以我决定走开OpenSource的道路!附上所涉及组件的所有必需源代码后:
并且我想出了堆栈跟踪,InstanceLimit是一个明确查询的GBean属性。它的默认值是10,它在Geronimo中是硬编码的。通过在调试器中调用此值,我得到了希望的结果!
但mailing list中也建议设置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>
(当然有正确的版本号) 但这没有任何效果。仔细阅读此hint:
后尝试将MdbContainer的InstanceLimit属性设置为0,以便创建的实例数与可用的AMQ会话数相匹配。要进行此设置,您需要将其设置为系统属性。该属性应为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 并检查Geronimos代码和运行时状态我发现它正在寻找org.apache.geronimo.openejb.OpenEjbSystemGBean
行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并且可以通过ActiveMQ的maxSessions
属性配置并行工作MDB!