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