diff options
Diffstat (limited to 'src/main/java/org/onap/msb/sdk/httpclient/lb')
3 files changed, 139 insertions, 0 deletions
diff --git a/src/main/java/org/onap/msb/sdk/httpclient/lb/ILoadBalanceStrategy.java b/src/main/java/org/onap/msb/sdk/httpclient/lb/ILoadBalanceStrategy.java new file mode 100644 index 0000000..94ccd67 --- /dev/null +++ b/src/main/java/org/onap/msb/sdk/httpclient/lb/ILoadBalanceStrategy.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright 2017 ZTE, Inc. and others. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + ******************************************************************************/ +package org.onap.msb.sdk.httpclient.lb; + +import org.onap.msb.sdk.httpclient.ServiceHttpEndPointObject; + +/** + * 每个实际的策略对象在运行中会保持单例 + * + * @author hu.rui + * + */ +public interface ILoadBalanceStrategy { + + ServiceHttpEndPointObject chooseEndPointObject(LoadBalanceContext lbCtx); + +} diff --git a/src/main/java/org/onap/msb/sdk/httpclient/lb/LoadBalanceContext.java b/src/main/java/org/onap/msb/sdk/httpclient/lb/LoadBalanceContext.java new file mode 100644 index 0000000..ee46de5 --- /dev/null +++ b/src/main/java/org/onap/msb/sdk/httpclient/lb/LoadBalanceContext.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright 2017 ZTE, Inc. and others. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + ******************************************************************************/ +package org.onap.msb.sdk.httpclient.lb; + +import java.lang.reflect.Method; +import java.util.List; + +import org.onap.msb.sdk.httpclient.ServiceHttpEndPointObject; + +/** + * @author hu.rui + * + */ +public class LoadBalanceContext { + + // 从msb上查询到的全部endPoint信息 + private List<ServiceHttpEndPointObject> endPoints; + + private Object[] args; + + private Method method; + + + public Method getMethod() { + return method; + } + + public void setMethod(Method method) { + this.method = method; + } + + public List<ServiceHttpEndPointObject> getEndPoints() { + return endPoints; + } + + public void setEndPoints(List<ServiceHttpEndPointObject> endPoints) { + this.endPoints = endPoints; + } + + public Object[] getArgs() { + return args; + } + + public void setArgs(Object[] args) { + this.args = args; + } + + + +} diff --git a/src/main/java/org/onap/msb/sdk/httpclient/lb/RoundRobinLBStrategy.java b/src/main/java/org/onap/msb/sdk/httpclient/lb/RoundRobinLBStrategy.java new file mode 100644 index 0000000..efbd0ba --- /dev/null +++ b/src/main/java/org/onap/msb/sdk/httpclient/lb/RoundRobinLBStrategy.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright 2017 ZTE, Inc. and others. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + ******************************************************************************/ +package org.onap.msb.sdk.httpclient.lb; + +import java.util.concurrent.atomic.AtomicLong; + +import org.onap.msb.sdk.httpclient.ServiceHttpEndPointObject; +import org.onap.msb.sdk.httpclient.exception.RetrofitServiceRuntimeException; + +/** + * @author hu.rui + * + */ +public class RoundRobinLBStrategy implements ILoadBalanceStrategy { + + private AtomicLong invokeCount = new AtomicLong(0); + + /* + * (non-Javadoc) + * + * @see + * com.zte.ums.zenap.httpclient.retrofit.lb.ILoadBalanceStrategy#chooseEndPointObject(com.zte.ums. + * zenap.httpclient.retrofit.lb.LoadBalanceContext) + */ + @Override + public ServiceHttpEndPointObject chooseEndPointObject(LoadBalanceContext lbCtx) { + + long invokecount = invokeCount.getAndIncrement(); + + if (lbCtx.getEndPoints().size() == 0) { + throw new RetrofitServiceRuntimeException("target endPoints is empty"); + } + + int mod = (int) (invokecount % lbCtx.getEndPoints().size()); + + return lbCtx.getEndPoints().get(mod); + } + +} |