2014-01-07 97 views
1

我已經有一個廣泛的駱駝整合路線系統。 路線使用camel-spring xml路徑定義進行定義。 現在我想用Actor系統替換一部分路線。使用阿卡2.3與廣泛的春季駱駝系統

Akka的1.x版本提供了幾種方法來實現這一點。

Akka 2.x只提供CamelExtension對象。每個ActorSystem只能加載一次擴展,由Akka管理。 該擴展初始化它自己的駱駝上下文,並且不提供使用包含已存在的駱駝上下文的包含路由和端點的駱駝上下文。

是否有任何其他可能性將2.x Actor系統整合到現有的駱駝路線中?

回答

0

這是一個有趣的問題。我從來沒有做過,但我會建議嘗試以編程方式獲取您的舊環境和「通行證」它CamelExtension

//Legacy part 
val legacySpringContext = new ClassPathXmlApplicationContext("applicationContext.xml"); 
val legacyCamelContext = legacySpringContext.getBean(CamelContext.class); 

//Akka part 
val system = ActorSystem("some system") 
val akkaCamel = CamelExtension(system) 

的問題是......可以把它再這麼容易?

akkaCamel.context = legacyCamelContext 

我真的不知道。好消息是,如果它不那麼容易,那麼你可能只是通過程序從legacyCamelContext中提取路線並通過akkaCamel.context.addRoutes將它們添加到akkaCamel.context

希望有所幫助。

0

您可以使用vm component讓兩個camel上下文在同一個JVM中相互交談。

0

您可以使用ContextProvider特徵提供CamelExtension與您自己的CamelContext

例如,這裏有一個,如果不使用Spring註冊的MongoDB連接豆:

package my.akka.app 

import akka.camel.ContextProvider 
import akka.actor.ExtendedActorSystem 
import org.apache.camel.impl.{SimpleRegistry, DefaultCamelContext} 
import com.mongodb.MongoClient 

class CamelContextProvider extends ContextProvider { 
    override def getContext(system: ExtendedActorSystem): DefaultCamelContext = { 
    val registry = new SimpleRegistry 
    val mongoClient = new MongoClient("localhost", 27017) 
    registry.put("localMongo", mongoClient) 
    new DefaultCamelContext(registry) 
    } 
} 

然後你只需要配置application.conf使用你的服務提供商:

akka { 
    camel { 
    context-provider = "my.akka.app.CamelContextProvider" 
    } 
} 

現在連接豆可用在註冊表中用於路線:

camelContext.addRoutes(new RouteBuilder { 
    "direct:start" --> "mongodb:localMongo?database=akka&collection=test&operation=save" 
}) 

要回答原始問題,您可以使用Vidya答案中的方法獲取您需要的彈簧配置CamelContext,並通過此方法將其提供給Akka CamelExtension