Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有负载均衡扩展的OSGi扩展器模式_Java_Osgi_Apache Felix - Fatal编程技术网

Java 带有负载均衡扩展的OSGi扩展器模式

Java 带有负载均衡扩展的OSGi扩展器模式,java,osgi,apache-felix,Java,Osgi,Apache Felix,我想实现以下场景: Extender使用他的扩展,而扩展是按其类型分组的。例如:Extender=Vendor,Extensions=HotDogSeller1、HotDogSeller2、PopcornSeller。我的观点是,客户(客户)想要购买热狗或爆米花,但他会选择负载较少的热狗卖家(队列较小) 我是OSGi新手,所以我想问一下实现这一点的最佳实践是什么?我想我可以将ApacheFelix与iPojo一起使用(而且它是免费的)。这有两个问题: 同一捆绑包必须安装两次(热狗实现,每个都有自

我想实现以下场景:

Extender使用他的扩展,而扩展是按其类型分组的。例如:Extender=Vendor,Extensions=HotDogSeller1、HotDogSeller2、PopcornSeller。我的观点是,客户(客户)想要购买热狗或爆米花,但他会选择负载较少的热狗卖家(队列较小)

我是OSGi新手,所以我想问一下实现这一点的最佳实践是什么?我想我可以将ApacheFelix与iPojo一起使用(而且它是免费的)。这有两个问题:
  • 同一捆绑包必须安装两次(热狗实现,每个都有自己的队列长度)

  • 以某种方式将相同类型的包(热狗、爆米花)分组。这可以通过为bundle创建属性来实现,该属性具有一些键,如区分HotDogSeller1和HotDogSeller2的“number”(编号)
  • 我认为您试图滥用扩展程序模式。其中一个关键特征是扩展程序模式本质上是静态的:当安装包时,一切都会发生。这似乎不是您的情况:对于同一个实现有多个队列,这让我认为这些队列后面有服务。服务的数量可以动态变化,所以extender不能很好地为您提供这方面的服务

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

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


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

    我认为您试图滥用扩展程序模式。其中一个关键特征是扩展程序模式本质上是静态的:当安装包时,一切都会发生。这似乎不是您的情况:对于同一个实现有多个队列,这让我认为这些队列后面有服务。服务的数量可以动态变化,所以extender不能很好地为您提供这方面的服务

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

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


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

    我认为可以通过更改bundle的URI并以不同的符号名称安装它来实现。这有点黑客,但我现在没有什么不同的想法。我认为可以通过更改bundle的URI并以不同的符号名安装它来实现。这有点老套,但我现在没什么不同的想法。