mirror of
https://gitee.com/mirrors/Spring-Cloud-Alibaba.git
synced 2021-06-26 13:25:11 +08:00
Polish spring-cloud-incubator/spring-cloud-alibaba#559 : Refactor and filter protocol
This commit is contained in:
parent
7af5e12003
commit
aef27e885e
@ -322,8 +322,8 @@ public class DubboServiceMetadataRepository {
|
|||||||
return hasText(protocolPort) ? Integer.valueOf(protocolPort) : null;
|
return hasText(protocolPort) ? Integer.valueOf(protocolPort) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<URL> getExportedURLs(String serviceInstance, String group, String version) {
|
public List<URL> getExportedURLs(String serviceInterface, String group, String version) {
|
||||||
String serviceKey = URL.buildKey(serviceInstance, group, version);
|
String serviceKey = URL.buildKey(serviceInterface, group, version);
|
||||||
return allExportedURLs.getOrDefault(serviceKey, Collections.emptyList());
|
return allExportedURLs.getOrDefault(serviceKey, Collections.emptyList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,15 +172,11 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry {
|
|||||||
.map(dubboMetadataConfigServiceProxy::getProxy)
|
.map(dubboMetadataConfigServiceProxy::getProxy)
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.forEach(dubboMetadataService -> {
|
.forEach(dubboMetadataService -> {
|
||||||
String serviceInterface = url.getServiceInterface();
|
List<URL> exportedURLs = getExportedURLs(dubboMetadataService, url);
|
||||||
String group = url.getParameter(GROUP_KEY);
|
|
||||||
String version = url.getParameter(VERSION_KEY);
|
|
||||||
String exportedURLsJSON = dubboMetadataService.getExportedURLs(serviceInterface, group, version);
|
|
||||||
List<URL> exportedURLs = jsonUtils.toURLs(exportedURLsJSON);
|
|
||||||
List<URL> allSubscribedURLs = new LinkedList<>();
|
List<URL> allSubscribedURLs = new LinkedList<>();
|
||||||
for (URL exportedURL : exportedURLs) {
|
for (URL exportedURL : exportedURLs) {
|
||||||
String serviceName = exportedURL.getParameter(APPLICATION_KEY);
|
String serviceName = exportedURL.getParameter(APPLICATION_KEY);
|
||||||
List<ServiceInstance> serviceInstances = discoveryClient.getInstances(serviceName);
|
List<ServiceInstance> serviceInstances = getServiceInstances(serviceName);
|
||||||
String protocol = exportedURL.getProtocol();
|
String protocol = exportedURL.getProtocol();
|
||||||
List<URL> subscribedURLs = new LinkedList<>();
|
List<URL> subscribedURLs = new LinkedList<>();
|
||||||
serviceInstances.forEach(serviceInstance -> {
|
serviceInstances.forEach(serviceInstance -> {
|
||||||
@ -209,6 +205,21 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<URL> getExportedURLs(DubboMetadataService dubboMetadataService, URL url) {
|
||||||
|
String serviceInterface = url.getServiceInterface();
|
||||||
|
String group = url.getParameter(GROUP_KEY);
|
||||||
|
String version = url.getParameter(VERSION_KEY);
|
||||||
|
// The subscribed protocol may be null
|
||||||
|
String subscribedProtocol = url.getParameter(PROTOCOL_KEY);
|
||||||
|
String exportedURLsJSON = dubboMetadataService.getExportedURLs(serviceInterface, group, version);
|
||||||
|
return jsonUtils
|
||||||
|
.toURLs(exportedURLsJSON)
|
||||||
|
.stream()
|
||||||
|
.filter(exportedURL ->
|
||||||
|
subscribedProtocol == null || subscribedProtocol.equalsIgnoreCase(exportedURL.getProtocol())
|
||||||
|
).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void subscribeDubboMetadataServiceURLs(URL url, NotifyListener listener) {
|
private void subscribeDubboMetadataServiceURLs(URL url, NotifyListener listener) {
|
||||||
String serviceInterface = url.getServiceInterface();
|
String serviceInterface = url.getServiceInterface();
|
||||||
|
@ -64,13 +64,13 @@ public interface DubboMetadataService {
|
|||||||
Map<String, String> getAllExportedURLs();
|
Map<String, String> getAllExportedURLs();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the json content of an exported List<URL> of {@link URL URLs} by the serviceInstance , group and version
|
* Get the json content of an exported List<URL> of {@link URL URLs} by the serviceInterface , group and version
|
||||||
*
|
*
|
||||||
* @param serviceInstance The class name of service interface
|
* @param serviceInterface The class name of service interface
|
||||||
* @param group {@link Service#group() the service group} (optional)
|
* @param group {@link Service#group() the service group} (optional)
|
||||||
* @param version {@link Service#version() the service version} (optional)
|
* @param version {@link Service#version() the service version} (optional)
|
||||||
* @return non-null read-only {@link List}
|
* @return non-null read-only {@link List}
|
||||||
* @see URL
|
* @see URL
|
||||||
*/
|
*/
|
||||||
String getExportedURLs(String serviceInstance, String group, String version);
|
String getExportedURLs(String serviceInterface, String group, String version);
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,9 @@ package org.springframework.cloud.alibaba.dubbo.service;
|
|||||||
|
|
||||||
import org.apache.dubbo.rpc.service.GenericService;
|
import org.apache.dubbo.rpc.service.GenericService;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationHandler;
|
import java.lang.reflect.InvocationHandler;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
@ -29,14 +32,7 @@ import java.util.stream.Stream;
|
|||||||
*/
|
*/
|
||||||
class DubboMetadataServiceInvocationHandler implements InvocationHandler {
|
class DubboMetadataServiceInvocationHandler implements InvocationHandler {
|
||||||
|
|
||||||
/**
|
private final Logger logger = LoggerFactory.getLogger(getClass());
|
||||||
* The method name of {@link DubboMetadataService#getServiceRestMetadata()}
|
|
||||||
*/
|
|
||||||
private static final String METHOD_NAME = "getServiceRestMetadata";
|
|
||||||
|
|
||||||
private static final String[] PARAMETER_TYPES = new String[0];
|
|
||||||
|
|
||||||
private static final String[] PARAMETER_VALUES = new String[0];
|
|
||||||
|
|
||||||
private final GenericService genericService;
|
private final GenericService genericService;
|
||||||
|
|
||||||
@ -46,7 +42,15 @@ class DubboMetadataServiceInvocationHandler implements InvocationHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
||||||
return genericService.$invoke(method.getName(), getParameterTypes(method), args);
|
Object returnValue = null;
|
||||||
|
try {
|
||||||
|
returnValue = genericService.$invoke(method.getName(), getParameterTypes(method), args);
|
||||||
|
} catch (Throwable e) {
|
||||||
|
if (logger.isErrorEnabled()) {
|
||||||
|
logger.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return returnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String[] getParameterTypes(Method method) {
|
private String[] getParameterTypes(Method method) {
|
||||||
|
@ -84,8 +84,8 @@ public class IntrospectiveDubboMetadataService implements DubboMetadataService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getExportedURLs(String serviceInstance, String group, String version) {
|
public String getExportedURLs(String serviceInterface, String group, String version) {
|
||||||
List<URL> urls = dubboServiceMetadataRepository.getExportedURLs(serviceInstance, group, version);
|
List<URL> urls = dubboServiceMetadataRepository.getExportedURLs(serviceInterface, group, version);
|
||||||
return jsonUtils.toJSON(urls);
|
return jsonUtils.toJSON(urls);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user