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

com.tencent.polaris.router.api.rpc.ProcessRoutersRequest Maven / Gradle / Ivy

There is a newer version: 2.0.0.0-RC3
Show newest version
/*
 * Tencent is pleased to support the open source community by making Polaris available.
 *
 * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
 *
 * Licensed under the BSD 3-Clause License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * https://opensource.org/licenses/BSD-3-Clause
 *
 * 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 com.tencent.polaris.router.api.rpc;

import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;

import com.tencent.polaris.api.pojo.RouteArgument;
import com.tencent.polaris.api.pojo.ServiceInfo;
import com.tencent.polaris.api.pojo.ServiceInstances;
import com.tencent.polaris.api.pojo.SourceService;
import com.tencent.polaris.api.rpc.MetadataFailoverType;
import com.tencent.polaris.api.rpc.RequestBaseEntity;
import com.tencent.polaris.api.utils.CollectionUtils;
import com.tencent.polaris.api.utils.MapUtils;

/**
 * 路由处理请求
 */
public class ProcessRoutersRequest extends RequestBaseEntity {

	private SourceService sourceService;

	private RouterNamesGroup routers;

	private ServiceInstances dstInstances;

	private String method;

	//各个路由插件依赖的 metadata 参数
	private Map> routerArgument;
	//元数据路由降级策略
	private MetadataFailoverType metadataFailoverType;

	public ServiceInfo getSourceService() {
		return sourceService;
	}

	public void setSourceService(ServiceInfo serviceInfo) {
		this.sourceService = new SourceService();
		this.sourceService.setService(serviceInfo.getService());
		this.sourceService.setNamespace(serviceInfo.getNamespace());

		Optional.ofNullable(serviceInfo.getMetadata()).orElse(new HashMap<>())
				.forEach((key, value) -> sourceService.appendArguments(RouteArgument.fromLabel(key, value)));

		buildRouterArgumentsBySourceService();
	}

	public String getMethod() {
		return method;
	}

	public void setMethod(String method) {
		this.method = method;
	}

	public RouterNamesGroup getRouters() {
		return routers;
	}

	public void setRouters(RouterNamesGroup routers) {
		this.routers = routers;
	}

	public ServiceInstances getDstInstances() {
		return dstInstances;
	}

	public void setDstInstances(ServiceInstances dstInstances) {
		this.dstInstances = dstInstances;
	}

	public void putRouterArgument(String routerType, Set arguments) {
		if (CollectionUtils.isEmpty(arguments)) {
			return;
		}
		if (routerArgument == null) {
			routerArgument = new HashMap<>();
		}

		routerArgument.put(routerType, arguments);
	}

	public Set getRouterArguments(String routerType) {
		buildRouterArgumentsBySourceService();
		Set arguments = routerArgument.get(routerType);
		if (CollectionUtils.isEmpty(arguments)) {
			return Collections.emptySet();
		}

		return Collections.unmodifiableSet(arguments);
	}

	public Map> getRouterArguments() {
		buildRouterArgumentsBySourceService();
		Map> routerArgument = new HashMap<>(this.routerArgument);
		return Collections.unmodifiableMap(routerArgument);
	}

	public MetadataFailoverType getMetadataFailoverType() {
		return metadataFailoverType;
	}

	public void setMetadataFailoverType(MetadataFailoverType metadataFailoverType) {
		this.metadataFailoverType = metadataFailoverType;
	}

	private void buildRouterArgumentsBySourceService() {
		if (CollectionUtils.isEmpty(routerArgument)) {
			routerArgument = new HashMap<>();
		}
		if (Objects.isNull(sourceService)) {
			return;
		}
		Set arguments = routerArgument.computeIfAbsent("ruleRouter", k -> new HashSet<>());
		arguments.addAll(sourceService.getArguments());
	}

	@Deprecated
	public void putRouterMetadata(String routerType, Map metadata) {
		if (MapUtils.isEmpty(metadata)) {
			return;
		}
		if (routerArgument == null) {
			routerArgument = new HashMap<>();
		}

		Set arguments = new HashSet<>();
		metadata.forEach((key, value) -> arguments.add(RouteArgument.fromLabel(key, value)));

		routerArgument.put(routerType, arguments);
	}

	@Deprecated
	public void addRouterMetadata(String routerType, Map metadata) {
		if (MapUtils.isEmpty(metadata)) {
			return;
		}

		if (routerArgument == null) {
			routerArgument = new HashMap<>();
		}

		Set arguments = routerArgument.computeIfAbsent(routerType, k -> new HashSet<>());
		metadata.forEach((key, value) -> arguments.add(RouteArgument.fromLabel(key, value)));
	}

	@Deprecated
	public Map getRouterMetadata(String routerType) {
		buildRouterArgumentsBySourceService();
		Set arguments = routerArgument.get(routerType);
		if (CollectionUtils.isEmpty(arguments)) {
			return Collections.emptyMap();
		}

		Map metadata = new HashMap<>();
		arguments.forEach(argument -> argument.toLabel(metadata));

		return Collections.unmodifiableMap(metadata);
	}

	@Deprecated
	public Map> getRouterMetadata() {
		buildRouterArgumentsBySourceService();

		Map> ret = new HashMap<>();

		routerArgument.forEach((routerType, arguments) -> {
			Map entry = ret.computeIfAbsent(routerType, k -> new HashMap<>());
			arguments.forEach(argument -> argument.toLabel(entry));
		});

		return ret;
	}

	public static class RouterNamesGroup {

		private List beforeRouters;

		private List coreRouters;

		private List afterRouters;

		public List getBeforeRouters() {
			return beforeRouters;
		}

		public void setBeforeRouters(List beforeRouters) {
			this.beforeRouters = beforeRouters;
		}

		public List getCoreRouters() {
			return coreRouters;
		}

		public void setCoreRouters(List coreRouters) {
			this.coreRouters = coreRouters;
		}

		public List getAfterRouters() {
			return afterRouters;
		}

		public void setAfterRouters(List afterRouters) {
			this.afterRouters = afterRouters;
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy