【问题标题】:OSGi extender pattern with load ballancing extensions带有负载平衡扩展的 OSGi 扩展器模式
【发布时间】:2011-02-23 02:03:16
【问题描述】:

我想实现以下场景:

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

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

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

    • 我认为它可以通过更改捆绑包的 URI 并将其安装在不同的符号名称下来实现。这有点 hacky,但我现在没有不同的想法。

    标签: java osgi apache-felix


    【解决方案1】:

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

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

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

    如果你这样做,你可以使用 OSGi 声明式服务,所以你不需要编写代码来进行服务注册或任何其他服务管理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-27
      • 2018-04-29
      • 1970-01-01
      • 2016-07-25
      • 2012-04-02
      • 2015-12-25
      • 1970-01-01
      相关资源
      最近更新 更多