2012-05-31 106 views
1

我正在嘗試帶有持久隊列的vm傳輸;這是連接器的配置:在Mule ESB應用程序啓動時恢復持久性vm隊列

<vm:connector 
     name="vmConnector" 
     createMultipleTransactedReceivers="true" 
     numberOfConcurrentTransactedReceivers="20"> 
    <vm:queue-profile maxOutstandingMessages="50000"> 
     <file-queue-store/> 
    </vm:queue-profile> 
</vm:connector> 

交通運輸工作正常,運輸,.msg文件在.mule的相應子目錄積累。現在,如果我殺死VM(或者定期關閉mule實例),然後重新啓動mule和我的應用程序,我希望消耗當前隊列中的消息恢復,但事實並非如此。

我理解錯了什麼?我認爲這種行爲將是使用永久隊列的一個原因。或者我的配置有問題?這是我能從文檔中收集到的,但我可能錯過了一些東西。

編輯:在進一步檢查,我發現下面的投訴,我的應用程序日誌:

WARN TransactionalQueueManager [THREAD vmConnector.scheduler.03 THREAD]: Could not commit tx 768d9b5c-ab3a-11e1-a48f-ff62aff02664[committing], rolling back instead 
org.mule.util.xa.ResourceManagerException: Deleting ...\mule-enterprise-standalone-3.2.2\.mule\myapp\queuestore\work\0-768b784b-ab3a-11e1-a48f-ff62aff02664.msg failed (org.mule.api.store.ObjectStoreException) 
    at org.mule.util.queue.QueueTransactionContext.doCommit(QueueTransactionContext.java:201) 
    at org.mule.util.queue.TransactionalQueueManager.doCommit(TransactionalQueueManager.java:173) 
    at org.mule.util.xa.AbstractResourceManager.commitTransaction(AbstractResourceManager.java:288) 
    at org.mule.util.xa.DefaultXASession.commit(DefaultXASession.java:83) 
    at org.mule.transport.vm.VMTransaction.doCommit(VMTransaction.java:59) 
    at org.mule.transaction.AbstractTransaction.commit(AbstractTransaction.java:82) 
    at org.mule.transaction.AbstractSingleResourceTransaction.commit(AbstractSingleResourceTransaction.java:78) 
    at org.mule.transaction.TransactionTemplate.resolveTransaction(TransactionTemplate.java:147) 
    at org.mule.transaction.TransactionTemplate.execute(TransactionTemplate.java:117) 
    at org.mule.transport.TransactedPollingMessageReceiver.poll(TransactedPollingMessageReceiver.java:138) 
    at org.mule.transport.AbstractPollingMessageReceiver.performPoll(AbstractPollingMessageReceiver.java:219) 
    at org.mule.transport.PollingReceiverWorker.poll(PollingReceiverWorker.java:85) 
    at org.mule.transport.ContinuousPollingReceiverWorker.poll(ContinuousPollingReceiverWorker.java:36) 
    at org.mule.transport.PollingReceiverWorker.run(PollingReceiverWorker.java:53) 
    at org.mule.work.WorkerContext.run(WorkerContext.java:310) 
    at java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy.rejectedExecution(ThreadPoolExecutor.java:1746) 
    at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767) 
    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658) 
    at org.mule.work.ScheduleWorkExecutor.doExecute(ScheduleWorkExecutor.java:41) 
    at org.mule.work.MuleWorkManager.executeWork(MuleWorkManager.java:250) 
    at org.mule.work.MuleWorkManager.scheduleWork(MuleWorkManager.java:208) 
    at org.mule.transport.PollingReceiverWorkerSchedule.run(PollingReceiverWorkerSchedule.java:35) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 
    at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) 
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: org.mule.api.store.ObjectStoreException: Deleting ...\mule-enterprise-standalone-3.2.2\.mule\myapp\queuestore\work\0-768b784b-ab3a-11e1-a48f-ff62aff02664.msg failed 
    at org.mule.util.store.QueuePersistenceObjectStore.deleteStoreFile(QueuePersistenceObjectStore.java:310) 
    at org.mule.util.store.QueuePersistenceObjectStore.doRemove(QueuePersistenceObjectStore.java:295) 
    at org.mule.util.store.AbstractObjectStore.remove(AbstractObjectStore.java:91) 
    at org.mule.util.queue.TransactionalQueueManager.doRemove(TransactionalQueueManager.java:191) 
    at org.mule.util.queue.QueueTransactionContext.doCommit(QueueTransactionContext.java:193) 
    ... 30 more 

所提到的文件確實還存在。

+0

乍一看,感覺就像一個錯誤。 Mule版本?在重新啓動之前你看到持久的消息嗎? –

+0

版本爲3.2.2 EE;我可以確認在jvm關閉時在queuestore子目錄中看到.msg文件,並在重新啓動後看到它們停留在那裏。我也終於看到了日誌,並發現上面添加的堆棧軌跡。 – Jule

+0

EE?我建議你直接聯繫MuleSoft支持。 –

回答

1

這是a known bug,已經修正爲3.2.3 EE和3.3.0 CE。

+0

我的搜索fu已經失敗了我。非常感謝! – Jule