客戶使用此模式: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%肯定的,但它至少可以開始尋找。 –