0

OSGi 的好处之一是版本控制,如此处所述。根据文档,OSGi 可以托管不同版本的“相同 jar”,并让其他应用程序相应地访问它们。

我的任务是使用 Camel 路由来利用 OSGi 的相同属性(我正在使用Apache-Karaf容器)。

我必须部署多个版本的服务并让Camel根据请求路由到正确的版本。我广泛搜索了谷歌,但我没有找到合适的例子:(

请给我任何指示或指导我举个例子。

更新

通过服务,我的意思是 osgi 捆绑服务,它是这样定义的

  <osgi:service ref="transformService">
        <osgi:interfaces>
            <value>demo.service.TransformService</value>
        </osgi:interfaces>
  </osgi:service>

我已经按照本教程中提供的步骤创建了一个名为transformService并且TransformServiceImpl是该服务的实现类的服务。

现在假设我将修改TransformServiceImpl并作为新版本发布(通过在 中更新我的版本pom.xml)。另外,我将安装这两个版本,也就是说, demo.service-0.1.jardemo.service-0.2.jarKaraf 中这对 Karaf 来说是可以的)。在这种情况下,我如何路由到特定版本的服务?

我可以创建 2osgi: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>
4

1 回答 1

1

OSGi 版本控制不同于服务版本控制。我认为关键问题是如何使用不同版本访问这些骆驼路线。

如果你的骆驼路由提供 RESTful 服务,可以很容易地通过使用不同的 url 来提供不同的版本,例如“/service/v1”、“/service/v2”。但这与 OSGi 版本控制不同,您仍然需要做一些工作来填补空白。

于 2014-04-09T03:53:15.537 回答