序文
多くのDubboインターフェースが作業で使用されているため、製品間の共同デバッグ中に呼び出しタイムアウトやデータの混乱の問題が発生することがよくあります。現時点で、個別にテストしてプロバイダーインターフェースを呼び出す場合は、プロジェクト全体を開始する必要があります。 。プロジェクトが大きい場合、よく比較されます。時間と手間がかかりました。後で、API構成メソッドを使用して直接コンシューマーをシミュレートし、インターフェースを直接呼び出すことができることを発見しました。シンプルで失礼です。ユニットテストとして非常に役立ちました。ユニットテストはすぐ下に投稿されました。
public class DubboProviderTest {
/**
* 当前应用注册信息
*/
private static ApplicationConfig applicationConfig = new ApplicationConfig();
/**
* 注册中心信息缓存
*/
private static Map<String, RegistryConfig> registryConfigMap = new ConcurrentHashMap<>();
/**
* key值
*/
private static String key = null;
static {
applicationConfig.setName("xxx.consumer");
}
@Test
public void test() {
String address = "zookeeper://10.1.62.134:2181";
ReferenceConfig<UserServiceApi> referenceConfig = getReferenceConfig(address, null, null, UserServiceApi.class);
if (null != referenceConfig) {
UserServiceApi userServiceApi = referenceConfig.get();
// 然后就是对提供者的部分方法测试..
UserDTO userDTO = userServiceApi.get("e10adc3949ba59abbe56e057f20f88dd");
System.out.println(userDTO.getRealname());
}
}
/**
* 获取注册中心信息
* @param address 注册中心地址
* @param version 服务提供者版本号
* @param group 服务所在的组
* @return
*/
private static RegistryConfig getRegistryConfig(String address, String version, String group) {
key = address + "-" + version + "-" + group;
RegistryConfig registryConfig = registryConfigMap.get(key);
if (null == registryConfig) {
registryConfig = new RegistryConfig();
registryConfig.setAddress(address);
registryConfig.setVersion(version);
registryConfig.setGroup(group);
registryConfigMap.put(key, registryConfig);
}
return registryConfig;
}
/**
* 获取服务提供者的代理对象
* @param address
* @param version
* @param group
* @param tClass 服务提供者接口
* @param <T>
* @return
*/
private static <T> ReferenceConfig<T> getReferenceConfig(String address, String version, String group, Class<T> tClass) {
// 该实例很重,有必要可缓存,否则可能造成内存泄漏和连接泄漏
ReferenceConfig<T> referenceConfig = new ReferenceConfig<>();
referenceConfig.setInterface(tClass);
referenceConfig.setApplication(applicationConfig);
referenceConfig.setRegistry(getRegistryConfig(address, version, group));
referenceConfig.setVersion(version);
return referenceConfig;
}
}
API構成を介してサービスプロバイダーを開始する場合は、Dubboの中国語マニュアルを参照してください:https://www.bookstack.cn/read/ApacheDubbo-zh/11.md