簡體   English   中英

如何為WMQ配置(彈簧)JMS連接池

[英]how to configure (spring) JMS connection Pool for WMQ

我正在嘗試在spring / camel中為Websphere MQ配置JMS連接池。 當嘗試從Spring使用CachingConnectionFactory時,我看到類強制轉換異常。 無法從WMQ中找到一個池,是否有人與WMQ完成了連接池,我沒有找到任何示例。 ActiveMQ有很多示例。

這是到目前為止,我正在產生類強制轉換異常。

<bean id="inCachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
    <property name="targetConnectionFactory" ref="inboundMqConnectionFactory1" />
    <property name="sessionCacheSize" value="5" />
</bean>

<bean id="inboundWebsphereMq1" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory" ref="inCachingConnectionFactory" />
    <property name="destinationResolver" ref="jmsDestinationResolver" />
    <property name="transacted" value="true" />
    <property name="transactionManager" ref="txManager1" />
</bean>

<bean id="inboundMqConnectionFactory1" class="com.ibm.mq.jms.MQQueueConnectionFactory">
    <property name="hostName" value="${isi.inbound.queue.host2}" />
    <property name="port" value="${isi.inbound.queue.port}" />
    <property name="queueManager" value="${isi.inbound.queue.queuemanager2}" />
    <property name="channel" value="${isi.inbound.queue.channel2}" />
    <property name="transportType" value="${isi.queue.transportType}" />
</bean>

我看到的異常在這里

試圖恢復。 原因:com.sun.proxy。$ Proxy37無法轉換為com.ibm.mq.jms.MQQueueSession

一般來說:

  • 不要使用QueueConnectionFactoryTopicConnectionFactory ,因為ConnectionFactory (JMS 1.1)可以替代兩者
  • v7 WMQ JMS客戶端jar中的每個ConnectionFactory都各自提供了緩存邏輯,因此通常不需要CachingConnection Factory。

現在以這種方式嘗試:

<bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory"
  p:queueManager="${QM_NAME}"
  p:hostName="${QM_HOST_NAME}"
  p:port="${QM_HOST_PORT}"
  p:channel="${QM_CHANNEL}"
  p:clientID="${QM_CLIENT_ID}">
  <property name="transportType">
    <util:constant static-field="com.ibm.msg.client.wmq.WMQConstants.WMQ_CM_CLIENT" />
  </property>
</bean>

<bean id="userConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter"
  p:targetConnectionFactory-ref="mqConnectionFactory"
  p:username="${QM_USERNAME}"
  p:password="${QM_PASSWORD}" />

<!-- this will work -->
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"
  p:targetConnectionFactory-ref="userConnectionFactory"
  p:cacheConsumers="true"
  p:reconnectOnException="true" />

當然,如果您願意的話,可以緩存會話而不是使用方。 以我的經驗,WMQ會話緩存是可衡量的性能改進,但前提是您受到WMQ計算機上的CPU能力或實際消息吞吐量的限制。 兩種情況在世界上大多數應用中都很少見。 緩存使用者避免了過多的MQ OPEN調用,這在WMQ上是昂貴的操作,因此也有幫助。

我的經驗法則是,消費者+會話緩存的性能優勢等於連接緩存的性能優勢的1/2,除非您受硬件限制,否則在日常的JEE堆棧中通常不會浪費時間。

從WMQ v7開始,與彈簧MC相比,異步使用方的速度非常快,幾乎沒有CPU開銷,並且如果您受硬件限制,則是使用消息的首選方式。 大部分時間我仍然使用Spring,因為我更喜歡Spring隨和的性質。

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM