package cn.reghao.oss.console.app.rpc;

import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ConsumerConfig;
import org.apache.dubbo.config.ReferenceConfig;

/**
 * @author reghao
 * @date 2024-02-23 13:19:20
 */
public class RemoteService<T> {
    public T getService(String host, int port, Class<T> clazz) {
        String serviceName = "remote-service";
        String dubboUrl = String.format("dubbo://%s:%s/%s", host, port, clazz.getName());

        // 当前应用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName(serviceName);

        ConsumerConfig consumerConfig = new ConsumerConfig();
        consumerConfig.setTimeout(60_000);

        // 注意：ReferenceConfig为重对象，内部封装了与注册中心的连接，以及与服务提供方的连接
        // 引用远程服务
        // 此实例很重，封装了与注册中心的连接以及与提供者的连接，请自行缓存，否则可能造成内存和连接泄漏
        ReferenceConfig<T> reference = new ReferenceConfig<>();
        reference.setApplication(application);
        reference.setInterface(clazz);
        reference.setUrl(dubboUrl);
        reference.setConsumer(consumerConfig);
        return reference.get();
    }
}
