[英]osgi-karaf-multiple versions of service and camel route
OSGi的優點之一是版本控制 ,如此處所述 。 根據文檔,OSGi可以托管不同版本的“相同jar”,並允許其他應用程序相應地訪問它們。
我已經獲得了使用駱駝路線利用OSGi相同屬性(我正在使用Apache-Karaf容器)的任務。
我必須部署一個服務的多個版本,並根據請求將Camel 路由到正確的版本。 我廣泛搜索了google,但沒有找到合適的示例:(
請給我任何指示或指導我舉個例子。
更新
通過服務 ,我的意思是像這樣定義的osgi bundle服務
<osgi:service ref="transformService">
<osgi:interfaces>
<value>demo.service.TransformService</value>
</osgi:interfaces>
</osgi:service>
我已經按照本教程中提供的步驟創建了一個名為transformService
的服務,而TransformServiceImpl
是該服務的實現類。
現在假設我將修改TransformServiceImpl
並將其發布為新版本(通過更新pom.xml
版本)。 另外,我將在Karaf中安裝兩個版本,即demo.service-0.1.jar
和demo.service-0.2.jar
對於Karaf來說是可以的)。 在這種情況下,如何路由到特定版本的服務?
我可以創建2個osgi:reference
指向相同的服務,但版本不同嗎? 像這樣嗎
<osgi:reference id="myTransformV0.1" version="0.1" interface="demo.service.TransformService"/>
<osgi:reference id="myTransformV0.2" version="0.2" interface="demo.service.TransformService"/>
並在路線中使用它們?
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="timer://myTimer?fixedRate=true&period=10000"/>
<choice>
<when ...> <bean ref="myTransformV0.1" method="transform"/>
<otherwise> <bean ref="myTransformV0.2" method="transform"/>
</choice>
<to uri="log:ExampleRouter"/>
</route>
</camelContext>
OSGi版本與服務版本不同。 我認為關鍵問題是如何使用不同版本訪問這些駱駝路線。
如果您的駱駝路線提供了RESTful服務,則可以通過使用不同的URL(例如“ / service / v1”,“ / service / v2”)輕松提供不同的版本。 但是與OSGi版本控制並不相同,您仍然需要做一些工作來填補空白。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.