1. 程式人生 > >spring 下 配置jms messageListener 的事務及相關問題

spring 下 配置jms messageListener 的事務及相關問題

根據官方文件(http://static.springsource.org/spring/docs/2.5.x/reference/jms.html中19.4.5一節)的說明,配置非同步訊息接收(即,監聽訊息) 的事務很簡單:  
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="connectionFactory"/>
    <property name="destination" ref="destination"/>
    <property name="messageListener" ref="messageListener"/>
    <property name="sessionTransacted" value="true"/>
</bean> 其中,messageListener bean 是java.jms.MessageListener介面的實現,其中包含了方法onMessage()用以處理接收到的訊息 相關說明:  1、這裡事務指的是:如果onMessage方法失敗,該訊息將回滾到JMS伺服器中。回滾也包含那些已經向JMS伺服器傳送的任何response 但對其它本地資源的操作將無法改變。所以,如果已經正確處理完訊息,但是onMessage()卻因其它原因失敗,那麼可能會造成對該訊息重複 的處理。  2、在onMessage()方法上設定了 事務後,由於存在“訊息預取”的機制,所以該session將預取的訊息全部處理完, 如果沒有設定訊息的超時時間的話。所以,在沒有超時的情況下,又有事務的onMessage()方法中,最好不要讓onMessage長期阻塞, 或者等待時間太長。。