2013-09-25 13 views
2

我真的很震驚這個概念。我有一個名爲「IN」的WMQ輸入隊列(在WMQ中爲此隊列命名爲「BACKOUT」的已配置退出隊列,其值爲4)。正如所料,它正在做3次重試,並最終BACKOUT隊列計數正在增加,但當我嘗試瀏覽消息,我無法看到這些消息。 一旦我停止騾流,並重新啓動WMQ瀏覽器,我可以看到「BACKOUT」中的消息。請找到我的配置xml。請幫助我。提前致謝。WMQ退出排隊概念在騾子ESB - 不能有效地工作

谷歌搜索它,發現它是交易沒有被提交的問題。但即使經過多次試驗,也無法解決問題。請幫助。

<?xml version="1.0" encoding="UTF-8"?> 
    <wmq:connector name="WMQ_Connector" hostName="hostName" port="1portName" queueManager="QM" channel="Channel" validateConnections="true" doc:name="WMQ Connector" disableTemporaryReplyToDestinations="true"/> 
    <flow name="BackoutFlow1" doc:name="BackoutFlow1"> 
    <wmq:inbound-endpoint queue="IN" connector-ref="WMQ_Connector" doc:name="WMQ" exchange-pattern="request-response" > 

     <wmq:transaction action="ALWAYS_BEGIN"/> 

    </wmq:inbound-endpoint> 
     <logger message="*******#[payload]****" level="INFO" doc:name="Logger"/> 
     <set-payload value="#[hi]" doc:name="Set Payload"/> 

    <wmq:outbound-endpoint queue="OUT" connector-ref="WMQ_Connector" doc:name="WMQ"> 
     <wmq:transaction action="NONE"/> 
    </wmq:outbound-endpoint> 
</flow> 

回答

1

的WebSphere MQ寫到消息到擱置隊列下同步點。但它不知道應用程序的上下文,也不知道是否以您的名義代表COMMIT。作爲一般規則,WMQ試圖不隱含地做不可逆轉的事情,而是要求程序方面採取明確的行動。

理論上,程序知道何時發出BACKOUT,如果需要可以立即發出COMMIT,或者繼續處理消息並在下一個工作單元中包含退出的消息。例如,該程序可以查看消息的退出計數,以確定給定消息是新消息還是正在重新發送。

在退出隊列中時,您無法看到處於同步點之下的消息。顯然,當你停止騾子,COMMIT正在發佈。如果導致退出的應用程序被終止而不是以有序的方式停止,通常的結果是由於隱含的命令ROLLBACK,消息被重新輸入到輸入隊列。

要看到消息,而不必停止騾子,無論是發行程序中的COMMIT或者在將讀取和堅定的,而不是被回滾隊列把第二個消息。該第二條消息上的COMMIT也將退回隊列中的退出消息COMMIT