远程调用dubbo服务
编写相关代码
import com.youhl.service.DemoService;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
/**
* Created by youhl002@lianlianpay.com
* date: 2021/12/28
* comment:
*/
public class DubboTest {
private static Map<String, String> DUBBO = new HashMap<>();
static {
DUBBO.put("dubbo.application.name", "xxx");
DUBBO.put("dubbo.application.owner", "xx");
DUBBO.put("dubbo.application.organization", "xx");
DUBBO.put("dubbo.protocol.port", "xx");
DUBBO.put("dubbo.protocol.name", "dubbo");
DUBBO.put("dubbo.registry.ids", "commonRegistry");
DUBBO.put("dubbo.registry.commonRegistry.protocol", "zookeeper");
DUBBO.put("dubbo.registry.commonRegistry.address", "xxx");
}
private static ApplicationConfig application;
private static Map<String, ReferenceConfig> references = new HashMap<>();
private static ApplicationConfig getApplication() {
if (application != null) {
return application;
}
Map<String, String> map = DUBBO;
application = new ApplicationConfig();
application.setName(map.get("dubbo.application.name"));
application.setOwner(map.get("dubbo.application.owner"));
application.setOrganization(map.get("dubbo.application.organization"));
String[] registryIds = StringUtils.split(map.get("dubbo.registry.ids"), ",");
if (registryIds != null && registryIds.length > 0) {
List<RegistryConfig> registryList = new ArrayList<>();
for (String id : registryIds) {
RegistryConfig registry = new RegistryConfig();
registry.setId(id);
registry.setProtocol(map.get(String.format("dubbo.registry.%s.protocol", id)));
registry.setAddress(map.get(String.format("dubbo.registry.%s.address", id)));
registryList.add(registry);
}
application.setRegistries(registryList);
} else {
RegistryConfig registry = new RegistryConfig();
registry.setId("registry");
registry.setProtocol(map.get("dubbo.registry.protocol"));
registry.setAddress(map.get("dubbo.registry.address"));
application.setRegistry(registry);
}
return application;
}
private static <T> ReferenceConfig<T> getReference(String id, Class<T> clazz) {
ReferenceConfig<T> reference = references.get(id);
if (reference != null) {
return reference;
}
reference = new ReferenceConfig<>();
reference.setId(id);
reference.setInterface(clazz.getName());
reference.setApplication(getApplication());
return reference;
}
public static void main(String[] args) {
ReferenceConfig<DemoService> rc = getReference("demoService",
DemoService.class);
Object res = rc.get().test();
System.out.println("查询结果 => \n" + JSON.toJSONString(res, true));
references.values().forEach(e -> e.destroy());
}
}
编译运行
常规部署的jar包:
cp -r /xxx/lib ./
javac -cp .:lib/* DubboTest.java
java -cp .:lib/* DubboTest
springboot打包:
unzip /xx/lib/xx.jar -d ./lib
javac -cp .:lib/BOOT-INF/classes:lib/BOOT-INF/lib/* DubboTest.java
java -cp .:lib/BOOT-INF/classes:lib/BOOT-INF/lib/* DubboTest