com.alibaba.dubbo.rpc
Interface Protocol

All Known Implementing Classes:
AbstractProtocol, AbstractProxyProtocol, DubboProtocol, HessianProtocol, HttpProtocol, InjvmProtocol, MemcachedProtocol, MockProtocol, ProtocolFilterWrapper, ProtocolListenerWrapper, RedisProtocol, RegistryProtocol, RmiProtocol, ThriftProtocol, WebServiceProtocol

@SPI(value="dubbo")
public interface Protocol

Protocol. (API/SPI, Singleton, ThreadSafe)

Author:
william.liangf

Method Summary
 void destroy()
          释放协议:
1.
<T> Exporter<T>
export(Invoker<T> invoker)
          暴露远程服务:
1.
 int getDefaultPort()
          获取缺省端口,当用户没有配置端口时使用。
<T> Invoker<T>
refer(Class<T> type, URL url)
          引用远程服务:
1.
 

Method Detail

getDefaultPort

int getDefaultPort()
获取缺省端口,当用户没有配置端口时使用。

Returns:
缺省端口

export

@Adaptive
<T> Exporter<T> export(Invoker<T> invoker)
                   throws RpcException
暴露远程服务:
1. 协议在接收请求时,应记录请求来源方地址信息:RpcContext.getContext().setRemoteAddress();
2. export()必须是幂等的,也就是暴露同一个URL的Invoker两次,和暴露一次没有区别。
3. export()传入的Invoker由框架实现并传入,协议不需要关心。

Type Parameters:
T - 服务的类型
Parameters:
invoker - 服务的执行体
Returns:
exporter 暴露服务的引用,用于取消暴露
Throws:
RpcException - 当暴露服务出错时抛出,比如端口已占用

refer

@Adaptive
<T> Invoker<T> refer(Class<T> type,
                              URL url)
                 throws RpcException
引用远程服务:
1. 当用户调用refer()所返回的Invoker对象的invoke()方法时,协议需相应执行同URL远端export()传入的Invoker对象的invoke()方法。
2. refer()返回的Invoker由协议实现,协议通常需要在此Invoker中发送远程请求。
3. 当url中有设置check=false时,连接失败不能抛出异常,并内部自动恢复。

Type Parameters:
T - 服务的类型
Parameters:
type - 服务的类型
url - 远程服务的URL地址
Returns:
invoker 服务的本地代理
Throws:
RpcException - 当连接服务提供方失败时抛出

destroy

void destroy()
释放协议:
1. 取消该协议所有已经暴露和引用的服务。
2. 释放协议所占用的所有资源,比如连接和端口。
3. 协议在释放后,依然能暴露和引用新的服务。



Copyright © 2012–2017 Alibaba. All rights reserved.