远程调用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