All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.houbb.rpc.client.config.reference.ReferenceConfig Maven / Gradle / Ivy

package com.github.houbb.rpc.client.config.reference;

import com.github.houbb.load.balance.api.ILoadBalance;
import com.github.houbb.rpc.client.support.fail.enums.FailTypeEnum;
import com.github.houbb.rpc.common.constant.enums.CallTypeEnum;
import com.github.houbb.rpc.common.support.inteceptor.RpcInterceptor;
import com.github.houbb.rpc.client.support.filter.RpcFilter;

/**
 * 引用配置类
 *
 * 后期配置:
 * (1)timeout 调用超时时间
 * (2)version 服务版本处理
 * (3)callType 调用方式 oneWay/sync/async
 * (4)check 是否必须要求服务启动。
 *
 * spi:
 * (1)codec 序列化方式
 * (2)netty 网络通讯架构
 * (3)load-balance 负载均衡
 * (4)失败策略 fail-over/fail-fast
 *
 * filter:
 * (1)路由
 * (2)耗时统计 monitor 服务治理
 *
 * 优化思考:
 * (1)对于唯一的 serviceId,其实其 interface 是固定的,是否可以省去?
 * @author binbin.hou
 * @since 0.0.6
 * @param  接口泛型
 */
public interface ReferenceConfig {

    /**
     * 获取对应的引用实现
     * @return 引用代理类
     * @since 0.0.6
     */
    T reference();

    /**
     * 设置服务标识
     * @param serviceId 服务标识
     * @return this
     * @since 0.0.6
     */
    ReferenceConfig serviceId(final String serviceId);

    /**
     * 设置服务接口信息
     * @param serviceInterface 服务接口信息
     * @return this
     * @since 0.0.6
     */
    ReferenceConfig serviceInterface(final Class serviceInterface);

    /**
     * 设置服务地址信息
     * (1)单个写法:ip:port:weight
     * (2)集群写法:ip1:port1:weight1,ip2:port2:weight2
     *
     * 其中 weight 权重可以不写,默认为1.
     *
     * @param addresses 地址列表信息
     * @return this
     * @since 0.0.6
     */
    ReferenceConfig addresses(final String addresses);

    /**
     * 设置超时时间
     * @param timeoutInMills 超时时间
     * @since 0.0.7
     * @return this
     */
    ReferenceConfig timeout(final long timeoutInMills);

    /**
     * 是否订阅发现服务
     * 注意:如果指定 {@link #addresses(String)} 信息,这个属性将会失效。
     * @param subscribe 是否订阅模式
     * @since 0.0.8
     * @return this
     */
    ReferenceConfig subscribe(final boolean subscribe);

    /**
     * 注册中心地址
     * (1)正常使用中,这个属性是可以固定写死,对使用者不可见的。
     * @param addresses 注册中心地址
     * @since 0.0.8
     * @return this
     */
    ReferenceConfig registerCenter(final String addresses);

    /**
     * 调用方式
     * @param callTypeEnum 调用方式
     * @since 0.1.0
     * @return this
     */
    ReferenceConfig callType(final CallTypeEnum callTypeEnum);

    /**
     * 失败类型
     * @param failTypeEnum 失败策略枚举
     * @since 0.1.1
     * @return this
     */
    ReferenceConfig failType(final FailTypeEnum failTypeEnum);

    /**
     * 设置是否进行泛化处理
     * @param generic 是否进行泛化处理
     * @since 0.1.2
     * @return this
     */
    ReferenceConfig generic(final boolean generic);

    /**
     * 调用拦截器
     * @param rpcInterceptor 拦截器信息
     * @return this
     * @since 0.1.4
     */
    ReferenceConfig rpcInterceptor(final RpcInterceptor rpcInterceptor);

    /**
     * 是否检测状态
     * @param check 是否检测
     * @return this
     * @since 0.1.5
     */
    ReferenceConfig check(final boolean check);

    /**
     * 设置过滤器
     * @param rpcFilter 过滤器
     * @return this
     * @since 0.2.0
     */
    ReferenceConfig rpcFilter(final RpcFilter rpcFilter);

    /**
     * 负载均衡
     * @param loadBalance 负载均衡
     * @return this
     * @since 0.2.0
     */
    ReferenceConfig loadBalance(final ILoadBalance loadBalance);

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy