我的實驗性應用程序非常簡單,嘗試使用Actors和Akka可以完成的工作。Akka Camel - JMS消息丟失 - 應等待Camel初始化?
JVM啓動後,它會與普通演員,JMS消費者(akka.camel.Consumer)和JMS生產者(akka.camel.Producer)一起創建actor系統。它在角色和JMS生產者 - > JMS服務器 - > JMS消費者之間發送幾條消息。它基本上通過JMS服務與自己交談。
我時不時遇到奇怪的行爲:似乎時不時,第一個應該發送到JMS服務器的消息不知何故丟失了。通過查看我的應用程序日誌,我可以看到應用程序試圖發送消息,但JMS服務器從未接收到它。 (對於每次運行,我必須再次啓動JVM &應用程序)。
Akka Camel Documentation提到,它可能是一些組件可能不完全初始化在開始時:「一些駱駝的組件可能需要一段時間來啓動,並在某些情況下,當端點被激活,並準備你可能想知道可以使用。「
我試圖執行以下操作以等待駱駝初始化
val system = ActorSystem("actor-system")
val camel = CamelExtension(system)
val jmsConsumer = system.actorOf(Props[JMSConsumer])
val activationFuture = camel.activationFutureFor(jmsConsumer)(timeout = 10 seconds, executor = system.dispatcher)
val result = Await.result(activationFuture,10 seconds)
這似乎幫助解決這個問題。 (雖然現在當刪除此步驟時,我無法再重新創建此問題...:/)。
我的問題是,這是否是正確的方法來確保所有組件都完全初始化?
我應該使用
val future = camel.activationFutureFor(actor)(timeout = 10 seconds, executor = system.dispatcher)
Await.result(future, 10 seconds)
每個akka.camel.Producer和akka.camel.Consumer演員,以確保一切正確初始化?
是所有我應該做的,還是其他什麼東西應該做的呢?文檔不上乾淨的,它不容易測試的問題是發生僅occasionaly ...
這似乎證實了我的方法,只是在Java中實現。謝謝。 – 2013-03-06 09:04:19