All Downloads are FREE. Search and download functionalities are using the official Maven repository.

rpc.turbo.transport.client.MethodRouter Maven / Gradle / Ivy

package rpc.turbo.transport.client;

import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

import rpc.turbo.invoke.InvokerUtils;
import rpc.turbo.loadbalance.LoadBalance;
import rpc.turbo.loadbalance.Weightable;

/**
 * 
 * @author Hank
 *
 */
final class MethodRouter {
	private final Method method;
	private final String serviceMethodName;
	private final LoadBalance loadBalance;

	MethodRouter(String serviceMethodName, LoadBalance loadBalance) {
		this.method = InvokerUtils.toMethod(serviceMethodName);
		this.serviceMethodName = serviceMethodName;
		this.loadBalance = loadBalance;
	}

	void setConnectors(Collection connectors) {
		if (connectors == null || connectors.size() == 0) {
			loadBalance.setWeightables(Collections.emptyList());
			return;
		}

		List supported = connectors.stream()//
				.filter(t -> t.isSupport(serviceMethodName))//
				.collect(Collectors.toList());

		loadBalance.setWeightables(supported);
	}

	ConnectorContext selectConnector() {
		return (ConnectorContext) loadBalance.select();
	}

	Method getMethod() {
		return method;
	}

	String getServiceMethodName() {
		return serviceMethodName;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy