Skip to content

Commit 15ba5c7

Browse files
qinliujiechickenlj
authored andcommitted
Merge pull request #3754, improve:change serviceMetadata order.
1 parent 13c1571 commit 15ba5c7

File tree

5 files changed

+106
-14
lines changed

5 files changed

+106
-14
lines changed

dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.apache.dubbo.rpc.model.ApplicationModel;
4141
import org.apache.dubbo.rpc.model.ConsumerMethodModel;
4242
import org.apache.dubbo.rpc.model.ConsumerModel;
43+
import org.apache.dubbo.rpc.model.ServiceMetadata;
4344
import org.apache.dubbo.rpc.protocol.injvm.InjvmProtocol;
4445
import org.apache.dubbo.rpc.service.GenericService;
4546
import org.apache.dubbo.rpc.support.ProtocolUtils;
@@ -153,6 +154,8 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig {
153154
*/
154155
private transient volatile boolean destroyed;
155156

157+
private ServiceMetadata serviceMetadata;
158+
156159
@SuppressWarnings("unused")
157160
private final Object finalizerGuardian = new Object() {
158161
@Override
@@ -174,9 +177,13 @@ protected void finalize() throws Throwable {
174177
};
175178

176179
public ReferenceConfig() {
180+
serviceMetadata = new ServiceMetadata();
181+
serviceMetadata.addAttribute("ORIGIN_CONFIG", this);
177182
}
178183

179184
public ReferenceConfig(Reference reference) {
185+
serviceMetadata = new ServiceMetadata();
186+
serviceMetadata.addAttribute("ORIGIN_CONFIG", this);
180187
appendAnnotation(Reference.class, reference);
181188
setMethods(MethodConfig.constructMethodConfig(reference.methods()));
182189
}
@@ -265,7 +272,18 @@ private void init() {
265272
checkStubAndLocal(interfaceClass);
266273
checkMock(interfaceClass);
267274

275+
276+
//init serivceMetadata
277+
serviceMetadata.setVersion(version);
278+
serviceMetadata.setGroup(group);
279+
serviceMetadata.setDefaultGroup(group);
280+
serviceMetadata.setServiceType(interfaceClass);
281+
serviceMetadata.setServiceInterfaceName(interfaceName);
282+
283+
284+
268285
ConsumerModel consumerModel = new ConsumerModel(interfaceName, group, version, getActualInterface());
286+
269287
ApplicationModel.initConsumerModel(URL.buildKey(interfaceName, group, version), consumerModel);
270288

271289
Map<String, String> map = new HashMap<String, String>();
@@ -316,8 +334,11 @@ private void init() {
316334
}
317335
map.put(Constants.REGISTER_IP_KEY, hostToRegistry);
318336

337+
serviceMetadata.getAttachments().putAll(map);
338+
319339
ref = createProxy(map);
320340

341+
serviceMetadata.setTarget(ref);
321342
consumerModel.getServiceMetadata().addAttribute(Constants.PROXY_CLASS_REF, ref);
322343
}
323344

dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.apache.dubbo.rpc.cluster.ConfiguratorFactory;
4141
import org.apache.dubbo.rpc.model.ApplicationModel;
4242
import org.apache.dubbo.rpc.model.ProviderModel;
43+
import org.apache.dubbo.rpc.model.ServiceMetadata;
4344
import org.apache.dubbo.rpc.service.GenericService;
4445
import org.apache.dubbo.rpc.support.ProtocolUtils;
4546

@@ -165,10 +166,16 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
165166
*/
166167
private volatile String generic;
167168

169+
private ServiceMetadata serviceMetadata;
170+
168171
public ServiceConfig() {
172+
serviceMetadata = new ServiceMetadata();
173+
serviceMetadata.addAttribute("ORIGIN_CONFIG", this);
169174
}
170175

171176
public ServiceConfig(Service service) {
177+
serviceMetadata = new ServiceMetadata();
178+
serviceMetadata.addAttribute("ORIGIN_CONFIG", this);
172179
appendAnnotation(Service.class, service);
173180
setMethods(MethodConfig.constructMethodConfig(service.methods()));
174181
}
@@ -334,6 +341,17 @@ private void appendParameters() {
334341
public synchronized void export() {
335342
checkAndUpdateSubConfigs();
336343

344+
//init serviceMetadata
345+
serviceMetadata.setVersion(version);
346+
serviceMetadata.setGroup(group);
347+
serviceMetadata.setDefaultGroup(group);
348+
serviceMetadata.setServiceType(interfaceClass);
349+
serviceMetadata.setServiceInterfaceName(interfaceName);
350+
serviceMetadata.setTarget(ref);
351+
352+
ProviderModel providerModel = new ProviderModel(ref, serviceMetadata);
353+
ApplicationModel.initProviderModel(URL.buildKey(interfaceName, group, version), providerModel);
354+
337355
if (!shouldExport()) {
338356
return;
339357
}
@@ -379,8 +397,7 @@ protected synchronized void doExport() {
379397
if (StringUtils.isEmpty(path)) {
380398
path = interfaceName;
381399
}
382-
ProviderModel providerModel = new ProviderModel(interfaceName, group, version, ref, interfaceClass);
383-
ApplicationModel.initProviderModel(URL.buildKey(interfaceName, group, version), providerModel);
400+
384401
doExportUrls();
385402
}
386403

@@ -518,6 +535,9 @@ private void doExportUrlsFor1Protocol(ProtocolConfig protocolConfig, List<URL> r
518535
map.put(Constants.TOKEN_KEY, token);
519536
}
520537
}
538+
//init serviceMetadata attachments
539+
serviceMetadata.getAttachments().putAll(map);
540+
521541
// export service
522542
String host = this.findConfigedHosts(protocolConfig, registryURLs, map);
523543
Integer port = this.findConfigedPorts(protocolConfig, name, map);

dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@ public ConsumerModel(String serviceName, String group, String version, Class<?>
3939
}
4040
}
4141

42+
public ConsumerModel(ServiceMetadata serviceMetadata) {
43+
this.serviceMetadata = serviceMetadata;
44+
Method[] methods = serviceMetadata.getServiceType().getMethods();
45+
for (Method method : methods) {
46+
methodModels.put(method, new ConsumerMethodModel(method));
47+
}
48+
}
49+
4250
/**
4351
* @return serviceMetadata
4452
*/

dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.lang.reflect.Method;
2020
import java.util.ArrayList;
2121
import java.util.Arrays;
22+
import java.util.Collections;
2223
import java.util.HashMap;
2324
import java.util.List;
2425
import java.util.Map;
@@ -29,6 +30,7 @@
2930
public class ProviderModel {
3031
private final Object serviceInstance;
3132
private final ServiceMetadata serviceMetadata;
33+
private final String serivceKey;
3234
private final Map<String, List<ProviderMethodModel>> methods = new HashMap<String, List<ProviderMethodModel>>();
3335

3436
public ProviderModel(String serviceName, String group, String version, Object serviceInstance, Class<?> serviceInterfaceClass) {
@@ -38,9 +40,16 @@ public ProviderModel(String serviceName, String group, String version, Object se
3840

3941
this.serviceInstance = serviceInstance;
4042
this.serviceMetadata = new ServiceMetadata(serviceName, group, version, serviceInterfaceClass);
43+
this.serivceKey = serviceMetadata.getServiceKey();
4144
initMethod(serviceInterfaceClass);
4245
}
4346

47+
public ProviderModel(Object serviceInstance, ServiceMetadata serviceMetadata) {
48+
this.serviceInstance = serviceInstance;
49+
this.serviceMetadata = serviceMetadata;
50+
this.serivceKey = serviceMetadata.getServiceKey();
51+
initMethod(serviceMetadata.getServiceType());
52+
}
4453

4554
public String getServiceName() {
4655
return this.serviceMetadata.getServiceKey();
@@ -75,20 +84,21 @@ public ProviderMethodModel getMethodModel(String methodName, String[] argTypes)
7584
}
7685

7786
public List<ProviderMethodModel> getMethodModelList(String methodName) {
78-
return methods.get(methodName);
87+
List<ProviderMethodModel> resultList = methods.get(methodName);
88+
return resultList == null ? Collections.emptyList() : resultList;
7989
}
8090

8191

8292
private void initMethod(Class<?> serviceInterfaceClass) {
83-
Method[] methodsToExport = null;
93+
Method[] methodsToExport;
8494
methodsToExport = serviceInterfaceClass.getMethods();
8595

8696
for (Method method : methodsToExport) {
8797
method.setAccessible(true);
8898

8999
List<ProviderMethodModel> methodModels = methods.get(method.getName());
90100
if (methodModels == null) {
91-
methodModels = new ArrayList<ProviderMethodModel>(1);
101+
methodModels = new ArrayList<ProviderMethodModel>();
92102
methods.put(method.getName(), methodModels);
93103
}
94104
methodModels.add(new ProviderMethodModel(method));

dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ServiceMetadata.java

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,16 @@
2525
*/
2626
public class ServiceMetadata {
2727

28-
private final String serviceKey;
29-
private final String serviceInterfaceName;
30-
private final String defaultGroup;
31-
private final String version;
32-
private final Class<?> serviceType;
28+
private String serviceKey;
29+
private String serviceInterfaceName;
30+
private String defaultGroup;
31+
private String version;
32+
private Class<?> serviceType;
3333

3434
private volatile String group;
3535

36+
private Object target;
37+
3638
/* will be transferred to remote side */
3739
private final Map<String, Object> attachments = new ConcurrentHashMap<String, Object>();
3840
/* used locally*/
@@ -47,17 +49,20 @@ public ServiceMetadata(String serviceInterfaceName, String group, String version
4749
this.serviceType = serviceType;
4850
}
4951

52+
public ServiceMetadata() {
53+
}
54+
5055
public String getServiceKey() {
51-
return serviceKey;
56+
return serviceInterfaceName + ":" + version;
5257
}
5358

5459
public Map<String, Object> getAttachments() {
5560
return attachments;
5661
}
5762

58-
// public Map<String, Object> getAttributeMap() {
59-
// return attributeMap;
60-
// }
63+
public Map<String, Object> getAttributeMap() {
64+
return attributeMap;
65+
}
6166

6267
public Object getAttribute(String key) {
6368
return attributeMap.get(key);
@@ -94,4 +99,32 @@ public String getGroup() {
9499
public void setGroup(String group) {
95100
this.group = group;
96101
}
102+
103+
public void setServiceInterfaceName(String serviceInterfaceName) {
104+
this.serviceInterfaceName = serviceInterfaceName;
105+
}
106+
107+
public void setDefaultGroup(String defaultGroup) {
108+
this.defaultGroup = defaultGroup;
109+
}
110+
111+
public void setVersion(String version) {
112+
this.version = version;
113+
}
114+
115+
public void setServiceType(Class<?> serviceType) {
116+
this.serviceType = serviceType;
117+
}
118+
119+
public void setServiceKey(String serviceKey) {
120+
this.serviceKey = serviceKey;
121+
}
122+
123+
public Object getTarget() {
124+
return target;
125+
}
126+
127+
public void setTarget(Object target) {
128+
this.target = target;
129+
}
97130
}

0 commit comments

Comments
 (0)