1

我想实现以下场景:

Extender 使用他的扩展,而扩展按他们的类型分组。例如:Extender = Vendor 和 Extensions = HotDogSeller1、HotDogSeller2、PopcornSeller。我的观点是客户(客户)想要购买 HotDogs 或 Popcorns,但是他会选择负载较少的 HotDogSeller(较小的队列)。

我是 OSGi 的新手,所以我想问一下实现这个的最佳实践是什么?我想我可以将 Apache Felix 与 iPojo 一起使用(它是扩展模式)。这有两个问题:

  • 同一个包必须安装两次(热狗实现,每个都有自己的队列长度)
  • 以某种方式将相同类型的捆绑包(热狗、爆米花)分组。这可以通过使用某些键(例如“数字”)来创建捆绑属性来区分 HotDogSeller1 和 HotDogSeller2)
  • 4

    1 回答 1

    1

    我认为您正试图滥用扩展器模式。关键特征之一是扩展器模式本质上是静态的:安装包时一切都会发生。看来这不是你的情况:为同一个实现有多个队列让我认为这些队列后面有服务。服务的数量可以动态变化,因此扩展器不能很​​好地为您服务。

    我认为如果您使用Whiteboard pattern会更好。(忽略它针对侦听器机制的事实)。这个想法是每个捆绑包都提供服务,可以处理您的请求。您使用ServiceTacker. 当您需要处理请求时,您会遍历所有可用服务并询问它们是否免费(您可以选择在内部处理此问题,而不与服务实现协商)。当找到免费服务时,您转发请求。

    您可以通过使用属性 'type' 和相应的值注册服务来对服务进行分组,这样您就可以使用具有 'type' 'HotDog' 和具有 'type' 'Popcorn' 的服务。

    如果采用这种方式,您可以使用 OSGi 声明式服务,因此您不需要编写代码来进行服务注册或任何其他服务管理。

    于 2011-07-05T15:10:28.687 回答