2012-09-17 76 views
4

我的應用程序(一個彈簧消息偵聽器)從一個隊列中讀取數據,並在單個事務中寫入數據庫。我使用Atomikos來提供XA事務行爲。例如,當應用程序突然以kill語句終止時,我看到消息丟失。有什麼具體的配置我需要使用?隊列應該持久嗎?目前隊列是非持久性的。我的MQ版本是v7.1。WebSphere MQ和Atomikos - 進程終止時丟失的消息

用於監聽器容器Spring配置是這樣的:根據需要

<bean id="listenerContainer" class="com.miax.test.TestListenerMDPImpl" autowire="byName"> 
    <property name="connectionFactory" ref="mqConnFactory" /> 
    <property name="destinationName" value="QUEUE" /> 
    <property name="messageListener" ref="listenerAdapter" /> 
    <property name="transactionManager" ref="jtaTransactionManager" /> 
    <property name="sessionTransacted" value="true" /> 
    <property name="concurrentConsumers" value="1" /> 
    <!-- receive time out, should be less than tranaction time out --> 
    <property name="receiveTimeout" value="3000" /> 
    <!-- retry connection every 1 seconds --> 
    <property name="recoveryInterval" value="1000" /> 
    <property name="autoStartup" value="true" /> 
    <property name="sessionAcknowledgeMode" value="0" /> 
</bean> 

任何其他信息將給予。

謝謝。

回答

4

您使用的客戶端必須是擴展交易客戶端,如果在今年5月之前下載的話。截至2012年5月,任何V7.0.1及更高版本的客戶端都具有內置的XA功能。如果有疑問,請下載WMQ客戶端的當前版本並安裝。

其次,XA事務管理器必須擁有自己的與隊列管理器的連接,而與應用程序無關。這樣可以在應用程序無法重新啓動時連接和協調事務。爲此,必須使用信息中心主題Configuring XA-compliant transaction managers中所述的XX_OPEN字符串和切換文件配置事務管理器。

對於它的價值,在WMQ中不存在持久隊列。這是消息本身是持久的(或不)。欲瞭解更多信息,請參閱my blog post on the topic。這是一個相當重要的話題,因爲當人們假設隊列本身是持久的時候,他們往往會設計出能產生意想不到結果的解決方案。請閱讀博客文章!

+0

有什麼辦法可以檢查Extended Transactional Client是否已經安裝? – arrehman

+0

'dspmqver -a'命令將顯示舊客戶端的XTC。但是,由於它現在已經構建到客戶端,並且沒有附加的軟件包或文件,我認爲它並不是一個單獨的組件。區分不帶XTC的舊客戶端和新客戶端的最佳方式就是安裝WMQ V7.5客戶端。除此之外,請下載v7.0.1或v7.1客戶端並重新安裝。抱歉,對於V7.0.1或V7.1客戶端,我沒有更好的答案。在您最近的其他問題中下載鏈接。 –

+0

謝謝。我會做的。 – arrehman