if (url != null && url.length() > 0) { // user specified URL, could be peer-to-peer address, or register center's address.
String[] us = Constants.SEMICOLON_SPLIT_PATTERN.split(url);
if (us != null && us.length > 0) {
for (String u : us) {
URL url = URL.valueOf(u);
if (url.getPath() == null || url.getPath().length() == 0) {
url = url.setPath(interfaceName);
}
if (Constants.REGISTRY_PROTOCOL.equals(url.getProtocol())) {
urls.add(url.addParameterAndEncoded(Constants.REFER_KEY, StringUtils.toQueryString(map)));
} else {
urls.add(ClusterUtils.mergeUrl(url, map));
}
}
}
} else { // assemble URL from register center's configuration
<dubbo:consumer>
<dubbo:parameter key="serialization" value="kryo" />
</dubbo:consumer>
https://github.com/apache/incubator-dubbo/blob/46b3458564cd0387d50f26f566556917cb74b999/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java#L329
比如提供者配置了serialization=kryo,然后消费者使用直连:
@Reference(url = "dubbo://127.0.0.1:20880")根据这段代码,消费者还是使用serialization默认的hessian2
如果是不配置走到
assemble URL from register center's configuration里就能继承提供者的配置update: 可以添加自定义参数解决
https://github.com/apache/incubator-dubbo/blob/88037747a3b69d3225c73f6fbcda36ebd8435887/dubbo-plugin/dubbo-qos/src/main/java/com/alibaba/dubbo/qos/server/Server.java#L102
https://github.com/apache/incubator-dubbo/blob/88037747a3b69d3225c73f6fbcda36ebd8435887/dubbo-plugin/dubbo-qos/src/main/java/com/alibaba/dubbo/qos/protocol/QosProtocolWrapper.java#L101