我正面临负载平衡算法实现,用于自定义负载平衡端点。
在此文档页面上: http://docs.wso2.org/display/ESB470/Load-balance+Endpoint
我看了:
算法 - 默认的“循环法”或该组的自定义加载算法。请参阅文章中有关此算法的更多信息。
“article”是此页面的链接点:
http://supunk.blogspot.it/2010/02/writing-load-balance-algorithm-for-wso2.html
但是引用的文章并不完整,也没有说明算法开发的任何内容。有人能给我一个有效的例子吗?
答案 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
包中的现有实施RoundRobin
,WeightedRRLCAlgorithm
和WeightedRoundRobin
类。
然后用您的类创建一个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,然后通过代码访问它以添加新的地址端点列表。