客户使用此模式:Spring MDP:轮询间隔?
- Apache的骆驼和CXF JMS接收器
- 这些内部使用Spring的MDP(消息驱动的POJO)来实现他们的信息接收器
- 他们被部署在IBM WebSphere Application Server上7
- 队列管理器是IBM Websphere MQ 6
- Spring MDP使用JNDI队列连接工厂绑定到队列管理器 - 支持连接池和会话池
这里是,这个人是使用骆驼这样的消息接收器的一个示例:
<bean id="ibmmq" class="org.apache.camel.component.jms.JmsComponent">
<property name="configuration" ref="jmsConfig"/>
</bean>
<!-- JNDI reference to the queue manager -->
<jee:jndi-lookup id="myTargetConnectionFactory" jndi-name="${mq.queueconnectionfactory}"/>
<bean id="jmsDestResolver" class="org.springframework.jms.support.destination.JndiDestinationResolver"/>
<bean id="myConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<property name="targetConnectionFactory" ref="myTargetConnectionFactory"/>
<property name="username" value="SOME_USER"/>
<property name="password" value=""/>
</bean>
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="${mq.connectionfactorybean}" />
<property name="destinationResolver" ref="jmsDestResolver" />
<property name="concurrentConsumers" value="1" />
<property name="maxConcurrentConsumers" value="1" />
<!--
NOTE: If we try to use a cache without a transactionManager we get "Connection closed" errors
-->
<property name="cacheLevelName" value="CACHE_NONE" />
</bean>
问题:在WebSphere MQ管理员报告MGET的啤酒数()对队列管理器的请求。目前的假设是,那些接收者不断地轮询新频道。
它们似乎没有MDB(消息驱动bean)的这个问题。 MDP异步实现是否真的是轮询机制?如果是这样,是否有办法限制队列管理器的访问?也许增加轮询间隔?任何见解,将不胜感激。
你的JMS配置似乎罚款。那里没有任何东西会妨碍听众作为听众。你可以发布你的骆驼路线/配置吗? –
在这条路线上会发现什么问题?重新:“没有任何东西会阻止听众作为听众。” - 会知道我在哪里可以找到有关MDP“侦听器”内部的文档。我担心,因为(可能是错误的)在线程中的答案:http://stackoverflow.com/questions/7390286/whats-the-difference-between-activationspec-and-connectionfactory。这表明MDP监听器在QCF上的行为是轮询的 - 与MDB相比,可能不是真正的异步监听器。我希望轮询应用不断地请求MGET。 –
稍后的一些研究,阅读我的答案。不是100%肯定的,但它至少可以开始寻找。 –