簡體   English   中英

osgi-karaf-服務和駱駝路線的多種版本

[英]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.jardemo.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&amp;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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM