2016-01-23 104 views
0

我讀:http://www.javaworld.com/article/2074123/java-web-development/transaction-and-redelivery-in-jms.html?page=2如何執行對於UN重新傳遞確認JMS消息

「一般地,確認特定消息確認會話接收所有先前消息」(在客戶端的確認模式)

「消息重新傳遞不是自動的,但消息在某些情況下」

我的問題交還:

  1. 我怎麼能ENS每當我收到一條消息時(但重用連接),都會有一個新會話?
  2. 如何執行未確認消息的重新傳送?使用這種CONFIGRATION

林:

<bean id="jmsConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory" 
      lazy-init="true"> 
      <property name="queueManager" value="${queueManager}" /> 
      <property name="hostName" value="${hostName}" /> 
      <property name="transportType" value="${transportType}" /> 
      <property name="port" value="${port}" /> 
      <property name="channel" value="${channel}" /> 
      <property name="SSLCipherSuite" value="${SSLCipherSuite}" /> 
     </bean> 
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"> 
    <property name="maxConnections" value="10"/> 
    <property name="maximumActive" value="100"/> 
    <property name="connectionFactory" ref="jmsConnectionFactory"/> 
</bean> 
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> 
    <property name="connectionFactory" ref="pooledConnectionFactory"/> 
    <property name="transacted" value="false"/> 
</bean> 

<bean id="mqNonJmsDestRes" class="calypsox.tk.util.NonJmsMQQueueDestinationResolver" /> 

<bean id="jms" class="org.apache.camel.component.jms.JmsComponent"> 
     <property name="configuration" ref="jmsConfig" /> 
     <property name="acknowledgementModeName" value="CLIENT_ACKNOWLEDGE" /> 
     <property name="destinationResolver" ref="mqNonJmsDestRes" /> 
</bean> 

我用駱駝處理器作爲端點bean作爲單

回答

0

你引用的那篇文章是從2002年起所有基於MQ系統已經收到了很多從那時起工作。在你的AMQ PooledConnectionFactory上,有一些設置可以控制你的連接在被破壞之前的持續時間,以及在你遇到錯誤時你應該怎麼做。我建議閱讀一些較新的文檔,因爲在過去的14年裏發生了很多變化。所以有些事情變得更容易了。

您還可以通過檢查「org.apache.camel.component.jms.JmsComponent」上的exceptionListener來配置如何管理異常,甚至在當前選項不適合您的需求時編寫自己的異常。

+0

謝謝。請問一些問題:我知道PooledConnectionFactory/cachedConnectionFactory緩存連接和會話(以及可選的接收器/生產者)。因此,是否爲每個新消息創建新會話?如果不是的話 - 我讀了這個確認是針對會話中的所有消息 - 非常糟糕......我需要爲每條消息創建一個新會話......但在這種情況下,會話如何彙集?並且 - 如果連接是所有會話的連接,那麼在我重新啓動我的應用程序之前不會傳遞確認消息,不是?也不好。 – user5157427

+0

如果我們正在專門討論ActiveMQ Pooled連接工廠。我最近用過。會話根據每個連接進行配置。這意味着如果你有一個錯誤(IE:超時或事務失敗),你可以配置工廠在錯誤中銷燬並重新創建連接,當你銷燬連接時,會話將被破壞並重新創建。有點棘手的配置,當你得到更復雜的事務設置,但基礎是如果你摧毀了連接,你還銷燬了相關的會話。 –

+0

是的,但未連接的消息將會在delivar而連接沒有重新啓動(連接正在被合併而不是關閉對於每條消息)?如果不是 - 我已經觸發了我的應用程序代碼每隔一段邏輯時間重新啓動一次連接,不是? – user5157427