/*
* Copyright 2008-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.hasor.rsf;
import net.hasor.core.BindInfo;
import net.hasor.core.Provider;
import java.net.URI;
import java.net.URISyntaxException;
/**
* 服务配置器
* @version : 2014年11月12日
* @author 赵永春(zyc@hasor.net)
*/
public interface RsfPublisher {
public RsfEnvironment getEnvironment();
/**
* 添加全局的RsfFilter。
* @param filterID filter ID
* @param instance 过滤器实例
*/
public RsfPublisher bindFilter(String filterID, RsfFilter instance);
/**
* 添加全局的RsfFilter。
* @param filterID filter ID
* @param provider provider for RsfFilter
*/
public RsfPublisher bindFilter(String filterID, Provider<? extends RsfFilter> provider);
/**
* 添加全局的RsfFilter。
* @param filterID filter ID
* @param filterBindInfo provider for RsfFilter
*/
public RsfPublisher bindFilter(String filterID, BindInfo<RsfFilter> filterBindInfo);
/**
* 添加全局的RsfFilter。
* @param filterID filter ID
* @param rsfFilterType type for RsfFilter
*/
public RsfPublisher bindFilter(String filterID, Class<? extends RsfFilter> rsfFilterType);
/**
* 绑定一个类型到RSF环境。
* @param type 服务类型
*
* @return 返回细粒度绑定操作接口 - {@link LinkedBuilder}
*/
public <T> LinkedBuilder<T> rsfService(Class<T> type);
/**
* 绑定一个类型并且为这个类型指定一个实例。开发者可以通过返回的 Builder 可以对绑定进行后续更加细粒度的绑定。<p>
* 该方法相当于“<code>rsfBinder.rsfService(type).toInstance(instance);</code>”
* @param type 服务类型
* @param instance 为绑定指定的实例对象。
* @return 返回细粒度绑定操作接口 - {@link ConfigurationBuilder}
* @see RsfPublisher.ConfigurationBuilder#rsfService(Class)
*/
public <T> ConfigurationBuilder<T> rsfService(Class<T> type, T instance);
/**
* 绑定一个类型并且为这个类型指定一个实现类。开发者可以通过返回的 Builder 可以对绑定进行后续更加细粒度的绑定。<p>
* 该方法相当于“<code>rsfBinder.rsfService(type).to(implementation);</code>”
* @param type 服务类型
* @param implementation 为绑定指定的实现类。
* @return 返回细粒度绑定操作接口 - {@link ConfigurationBuilder}
* @see RsfPublisher.ConfigurationBuilder#rsfService(Class)
*/
public <T> ConfigurationBuilder<T> rsfService(Class<T> type, Class<? extends T> implementation);
/**
* 绑定一个类型并且为这个类型指定一个实现类。开发者可以通过返回的 Builder 可以对绑定进行后续更加细粒度的绑定。<p>
* 该方法相当于“<code>rsfBinder.rsfService(type).toInfo(bindInfo);</code>”
* @param type 服务类型
* @param bindInfo 为绑定指定的实现类。
* @return 返回细粒度绑定操作接口 - {@link ConfigurationBuilder}
* @see RsfPublisher.ConfigurationBuilder#rsfService(Class)
*/
public <T> ConfigurationBuilder<T> rsfService(Class<T> type, BindInfo<T> bindInfo);
/**
* 绑定一个类型并且为这个类型指定一个Provider。开发者可以通过返回的 Builder 可以对绑定进行后续更加细粒度的绑定。<p>
* 该方法相当于“<code>rsfBinder.rsfService(type).toProvider(provider);</code>”
* @param type 服务类型
* @param provider 为绑定指定的实现类。
* @return 返回细粒度绑定操作接口 - {@link ConfigurationBuilder}
* @see RsfPublisher.ConfigurationBuilder#rsfService(Class)
*/
public <T> ConfigurationBuilder<T> rsfService(Class<T> type, Provider<T> provider);
//
//
/**处理类型和实现的绑定。*/
public static interface LinkedBuilder<T> extends ConfigurationBuilder<T> {
/**
* 为绑定设置一个实现类。
* @param implementation 实现类
* @return 返回 ConfigurationBuilder。
*/
public ConfigurationBuilder<T> to(Class<? extends T> implementation);
/**
* 为绑定设置一个实例。
* @param instance 实例对象
* @return 返回 ConfigurationBuilder。
*/
public ConfigurationBuilder<T> toInstance(T instance);
/**
* 为绑定设置一个 {@link Provider}。
* @param provider provider
* @return 返回 ConfigurationBuilder。
*/
public ConfigurationBuilder<T> toProvider(Provider<? extends T> provider);
/**
* 为绑定设置一个 {@link BindInfo}。
* @param bindInfo BindInfo
* @return 返回 ConfigurationBuilder。
*/
public ConfigurationBuilder<T> toInfo(BindInfo<? extends T> bindInfo);
}
/**设置服务名。*/
public static interface ConfigurationBuilder<T> extends FilterBindBuilder<T> {
/**
* 设置服务分组信息
* @param group 所属分组
* @return 返回ConfigurationBuilder
*/
public ConfigurationBuilder<T> group(String group);
/**
* 设置服务名称信息
* @param name 名称
* @return 返回ConfigurationBuilder
*/
public ConfigurationBuilder<T> name(String name);
/**
* 设置服务别名
* @param aliasType 分类
* @param aliasName 别名
* @return 返回ConfigurationBuilder
*/
public ConfigurationBuilder<T> aliasName(String aliasType, String aliasName);
/**
* 设置服务版本信息
* @param version 版本
* @return 返回ConfigurationBuilder
*/
public ConfigurationBuilder<T> version(String version);
/**
* 设置超时时间
* @param clientTimeout 超时时间
* @return 返回ConfigurationBuilder。
*/
public ConfigurationBuilder<T> timeout(int clientTimeout);
/**
* 设置序列化方式
* @param serializeType 序列化方式
* @return 返回ConfigurationBuilder
*/
public ConfigurationBuilder<T> serialize(String serializeType);
}
/**设置过滤器*/
public static interface FilterBindBuilder<T> extends RegisterBuilder<T> {
/**
* 为服务添加一个专有的RsfFilter。
* @param subFilterID filter ID,如果服务专有的filterID和全局RsfFilter出现冲突,那么优先选用该RsfFilter。
* @param instance Rsffilter实例
* @return 返回ConfigurationBuilder
*/
public FilterBindBuilder<T> bindFilter(String subFilterID, RsfFilter instance);
/**
* 为服务添加一个专有的RsfFilter。
* @param subFilterID filter ID,如果服务专有的filterID和全局RsfFilter出现冲突,那么优先选用该RsfFilter。
* @param provider provider for Rsffilter.
* @return 返回ConfigurationBuilder
*/
public FilterBindBuilder<T> bindFilter(String subFilterID, Provider<? extends RsfFilter> provider);
/**
* 为服务添加一个专有的RsfFilter。
* @param subFilterID filter ID,如果服务专有的filterID和全局RsfFilter出现冲突,那么优先选用该RsfFilter。
* @param rsfFilterType Class for Rsffilter.
* @return 返回ConfigurationBuilder
*/
public FilterBindBuilder<T> bindFilter(String subFilterID, Class<? extends RsfFilter> rsfFilterType);
/**
* 为服务添加一个专有的RsfFilter。
* @param subFilterID filter ID,如果服务专有的filterID和全局RsfFilter出现冲突,那么优先选用该RsfFilter。
* @param rsfFilterInfo Info for Rsffilter.
* @return 返回ConfigurationBuilder
*/
public FilterBindBuilder<T> bindFilter(String subFilterID, BindInfo<RsfFilter> rsfFilterInfo);
}
/**发布地址*/
public static interface RegisterBuilder<T> {
/**更新服务地址本计算规则(服务级)*/
public RegisterBuilder updateServiceRoute(String scriptBody);
/**更新本地方法级地址计算脚本。*/
public RegisterBuilder updateMethodRoute(String scriptBody);
/**更新本地参数级地址计算脚本。*/
public RegisterBuilder updateArgsRoute(String scriptBody);
/**更新服务路由策略*/
public RegisterBuilder updateFlowControl(String flowControl);
/**
* @param rsfHost 远程服务地址
* @param port 远程服务端口
*/
public RegisterBuilder<T> bindAddress(String rsfHost, int port) throws URISyntaxException;
/**
* 远程地址例:“rsf://127.0.0.1:8000/unit”或“rsf://127.0.0.1:8000/unit/group/name/version”
* @param rsfURI 远程服务地址
*/
public RegisterBuilder<T> bindAddress(String rsfURI, String... array) throws URISyntaxException;
/**
* 远程地址例:“rsf://127.0.0.1:8000/unit”或“rsf://127.0.0.1:8000/unit/group/name/version”
* @param rsfURI 远程服务地址
*/
public RegisterBuilder<T> bindAddress(URI rsfURI, URI... array);
/**
* 远程地址例:“rsf://127.0.0.1:8000/unit”或“rsf://127.0.0.1:8000/unit/group/name/version”
* @param rsfAddress 远程服务地址
*/
public RegisterBuilder<T> bindAddress(InterAddress rsfAddress, InterAddress... array);
/** @return 是否使用独立的线程池。*/
public RegisterBuilder<T> asAloneThreadPool();
/** @return 将接口的工作模式改为Message模式, 效果等同于加上 {@link RsfMessage}注解。*/
public RegisterBuilder<T> asMessage();
/** @return 隐藏模式, 隐藏模式下的服务无论身份是 提供者还是消费者, 都不会注册到注册中心上。
* 如果想要调用隐藏模式的服务必须要通过 P2P 形式进行调用。*/
public RegisterBuilder<T> asShadow();
/** @return 将服务注册到{@link RsfContext}上。*/
public RsfBindInfo<T> register();
}
}