spring 下 配置jms messageListener 的事務及相關問題
阿新 • • 發佈:2019-02-12
根據官方文件(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長期阻塞,
或者等待時間太長。。