Search in sources :

Example 1 with ExtensionLoader

use of com.alipay.sofa.rpc.ext.ExtensionLoader in project sofa-rpc by sofastack.

the class Bootstraps method from.

/**
 * 引用一个服务
 *
 * @param consumerConfig 服务消费者配置
 * @param <T>            接口类型
 * @return 引用启动类
 */
public static <T> ConsumerBootstrap<T> from(ConsumerConfig<T> consumerConfig) {
    String bootstrap = consumerConfig.getBootstrap();
    ConsumerBootstrap consumerBootstrap;
    if (StringUtils.isNotEmpty(bootstrap)) {
        consumerBootstrap = ExtensionLoaderFactory.getExtensionLoader(ConsumerBootstrap.class).getExtension(bootstrap, new Class[] { ConsumerConfig.class }, new Object[] { consumerConfig });
    } else {
        // default is same with protocol
        bootstrap = consumerConfig.getProtocol();
        ExtensionLoader extensionLoader = ExtensionLoaderFactory.getExtensionLoader(ConsumerBootstrap.class);
        ExtensionClass<ConsumerBootstrap> extensionClass = extensionLoader.getExtensionClass(bootstrap);
        if (extensionClass == null) {
            // if not exist, use default consumer bootstrap
            bootstrap = RpcConfigs.getStringValue(RpcOptions.DEFAULT_CONSUMER_BOOTSTRAP);
            consumerConfig.setBootstrap(bootstrap);
            consumerBootstrap = ExtensionLoaderFactory.getExtensionLoader(ConsumerBootstrap.class).getExtension(bootstrap, new Class[] { ConsumerConfig.class }, new Object[] { consumerConfig });
        } else {
            consumerConfig.setBootstrap(bootstrap);
            consumerBootstrap = extensionClass.getExtInstance(new Class[] { ConsumerConfig.class }, new Object[] { consumerConfig });
        }
    }
    return (ConsumerBootstrap<T>) consumerBootstrap;
}
Also used : ExtensionClass(com.alipay.sofa.rpc.ext.ExtensionClass) ConsumerConfig(com.alipay.sofa.rpc.config.ConsumerConfig) ExtensionLoader(com.alipay.sofa.rpc.ext.ExtensionLoader)

Aggregations

ConsumerConfig (com.alipay.sofa.rpc.config.ConsumerConfig)1 ExtensionClass (com.alipay.sofa.rpc.ext.ExtensionClass)1 ExtensionLoader (com.alipay.sofa.rpc.ext.ExtensionLoader)1