Spring boot 2.1中通过编码的方式获取Dubbo服务

使用Spring boot 2.1 与 dubbo 2.7.1

服务注册

import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;


ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName(config.getApplicationName());

RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress(config.getRegistryAddress());

ProtocolConfig protocol = new ProtocolConfig();
protocol.setName(config.getProtocolName());
protocol.setPort(config.getProtocolPort());

// 具体的结口的实现类
CompareServiceImpl impl = new CompareServiceImpl();

ServiceConfig<CompareService> service = new ServiceConfig<>();
service.setApplication(applicationConfig);
service.setRegistry(registryConfig);
service.setProtocol(protocol);
// 接口的类
service.setInterface(CompareService.class);
service.setRef(impl);
service.setVersion(config.getVersion());
service.setGroup(config.getGroup());

service.export();

服务获取

ApplicationConfig application = new ApplicationConfig();
application.setName(appName);

RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress(zookeeperUrl);

ReferenceConfig<CompareService> referenceConfig = new ReferenceConfig<>();
//referenceConfig.setApplication(application);
referenceConfig.setRegistry(registryConfig);
// 接口类
referenceConfig.setInterface(CompareService.class);
referenceConfig.setVersion(version);
referenceConfig.setGroup(group);

CompareService service = referenceConfig.get();

return service;
  1. 这种获取方式对资源开销还是很大的,最好进行缓存。
  2. 奇怪的是网上其他文章有设置application,也就是上面注释掉的哪一行代码,我运行的时候异常告诉我说,我的application重复了,去掉后就能正常的回去服务。可能是因为我是通过version 和 group 来指定不同的服务的吧。后续再深入读读源码

你可能感兴趣的:(spring-boot,dubbo)