OSGi的好处之一是版本为explained here。根据文档,OSGi可以托管不同版本的“同一个jar”,并让其他应用程序相应地访问它们。osgi-karaf-多种版本的服务和骆驼路线
我已经被赋予了一个使用骆驼路线的任务来利用OSGi的相同属性(我正在使用Apache-Karaf容器)。
我有部署服务的多个版本,并有骆驼,路线基于该请求的适当之一。我广泛搜索谷歌,但我还没有找到一个合适的例子:(
请把我的任何指针或指导我的例子。
更新
通过服务,我的意思是OSGi的这是这样
<osgi:service ref="transformService">
<osgi:interfaces>
<value>demo.service.TransformService</value>
</osgi:interfaces>
</osgi:service>
定义捆绑包服务,我已按照this tutorial提供来创建服务的步骤称为transformService
和TransformServiceImpl
是此服务的实现类。
现在我们假设我将修改TransformServiceImpl
并将其作为新版本发布(通过更新我的版本pom.xml
)。另外,我会安装这两个版本,即demo.service-0.1.jar
和demo.service-0.2.jar
在卡拉夫(这是可以与卡拉夫)。在这种情况下,我如何路由到特定版本的服务?
我可以创建指向相同服务但不同版本的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>
你可以在中间放置一个队列,并将你的消息推送到队列中,并在队列中添加一个属性,指出需要处理的版本?那么您可以为每个版本创建一个订阅者,为每个消息应用一个过滤器,以便他们仅处理其版本的消息?我不确定您是否在Fuse中运行或有A-MQ易于使用 –