
com.huaweicloud.visibility.interceptor.ApacheDubboSubscribeInterceptor Maven / Gradle / Ivy
/*
* Copyright (C) 2021-2022 Huawei Technologies Co., Ltd. All rights reserved.
*
* 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 com.huaweicloud.visibility.interceptor;
import com.huaweicloud.sermant.core.plugin.agent.entity.ExecuteContext;
import com.huaweicloud.sermant.core.utils.ReflectUtils;
import com.huaweicloud.sermant.core.utils.StringUtils;
import com.huaweicloud.visibility.common.CollectorCache;
import com.huaweicloud.visibility.common.Constants;
import com.huaweicloud.visibility.common.OperateType;
import com.huaweicloud.visibility.common.ServiceType;
import com.huaweicloud.visibility.entity.Consanguinity;
import com.huaweicloud.visibility.entity.Contract;
import com.huaweicloud.visibility.entity.ServerInfo;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.rpc.Invoker;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* Dubbo服务发现增强器
*
* @author zhp
* @since 2022-12-05
*/
public class ApacheDubboSubscribeInterceptor extends AbstractCollectorInterceptor {
private static final String INVOKE_FIELD_NAME = "urlInvokerMap";
private static final String PROVIDER_URL_FIELD_NAME = "providerUrl";
@Override
public ExecuteContext before(ExecuteContext context) {
return context;
}
@Override
public ExecuteContext after(ExecuteContext context) {
Object object = context.getMemberFieldValue(INVOKE_FIELD_NAME);
if (!(object instanceof Map)) {
return context;
}
Map> urlInvokerMap =
(Map>) context.getMemberFieldValue(INVOKE_FIELD_NAME);
if (urlInvokerMap == null || urlInvokerMap.isEmpty()) {
return context;
}
ServerInfo serverinfo = new ServerInfo();
extracted(urlInvokerMap, serverinfo);
serverinfo.setOperateType(OperateType.ADD.getType());
if (!serverinfo.getConsanguinityList().isEmpty()) {
serverinfo.getConsanguinityList().forEach(CollectorCache::saveConsanguinity);
} else {
List invokerUrls = (List) context.getArguments()[0];
if (invokerUrls != null && invokerUrls.size() > 0) {
invokerUrls.forEach(invokerUrl -> {
Consanguinity consanguinity = fillConsanguinity(invokerUrl);
serverinfo.getConsanguinityList().add(consanguinity);
CollectorCache.saveConsanguinity(consanguinity);
});
}
}
collectorService.sendServerInfo(serverinfo);
return context;
}
/**
* 获取血缘关系信息
*
* @param urlInvokerMap 服务提供者信息
* @param serverinfo 服务信息
*/
private static void extracted(Map> urlInvokerMap, ServerInfo serverinfo) {
Map consanguinityMap = new HashMap<>();
serverinfo.setConsanguinityList(new ArrayList<>());
for (Map.Entry> entry : urlInvokerMap.entrySet()) {
Invoker> invoker = entry.getValue();
Optional
© 2015 - 2025 Weber Informatics LLC | Privacy Policy