为WSO2 ESB编写负载平衡算法

时间:2013-11-24 00:17:48

标签: algorithm wso2 load-balancing wso2esb

我正面临负载平衡算法实现,用于自定义负载平衡端点。

在此文档页面上:     http://docs.wso2.org/display/ESB470/Load-balance+Endpoint

我看了:

  

算法 - 默认的“循环法”或该组的自定义加载算法。请参阅文章中有关此算法的更多信息。

“article”是此页面的链接点:

http://supunk.blogspot.it/2010/02/writing-load-balance-algorithm-for-wso2.html

但是引用的文章并不完整,也没有说明算法开发的任何内容。有人能给我一个有效的例子吗?

3 个答案:

答案 0 :(得分:2)

您可以使用以下示例使用Round Robin算法发送多个请求以在不同端点之间共享。

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="TestLoadBalance"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <endpoint>
         <loadbalance algorithm="org.apache.synapse.endpoints.algorithms.RoundRobin">
            <endpoint>
               <address uri="http://localhost:9000/services/SimpleStockQuoteService/"/>
            </endpoint>
            <endpoint>
               <address uri="http://localhost:9001/services/SimpleStockQuoteService/"/>
            </endpoint>
            <endpoint>
               <address uri="http://localhost:9002/services/SimpleStockQuoteService/"/>
            </endpoint>
         </loadbalance>
      </endpoint>
   </target>
   <description/>
</proxy>

答案 1 :(得分:0)

正如文档所指定的那样,算法应该是org.apache.synapse.endpoints.algorithms.LoadbalanceAlgorithm

的实现

您需要编写一个实现LoadbalanceAlgorithm接口的类。您可以参考org.apache.synapse.endpoints.algorithms包中的现有实施RoundRobinWeightedRRLCAlgorithmWeightedRoundRobin类。

然后用您的类创建一个jar文件并将其添加到<ESB_HOME>/repository/components/lib文件夹并重新启动服务器。

现在,在添加负载平衡端点时,请为Other...选择Algorithm,并提供自定义算法的完整类名。例如:org.apache.synapse.endpoints.algorithms.WeightedRoundRobin

答案 2 :(得分:0)

看着 LoadBalanceAlgortihm简直给它一个动态的端点列表是不可能的。 关于LoadBalanceMambershipHandler及其实现(Axis2和Service)......它使用如下对象:

org.apache.axis2.clustering.management.GroupManagementAgent
and
org.apache.axis2.clustering.ClusteringAgent

因此您必须使用ESB中/ repository / conf / axis2文件夹中的axi2.xml在集群中配置节点。 使用ESB注册表保存loadbalance enpoint,然后通过代码访问它以添加新的地址端点列表。