Dubbo源码学习--thrift协议(九)

30人阅读 评论(0) 收藏 举报
分类:

当前 dubbo 支持 1的 thrift 协议是对 thrift 原生协议 2 的扩展,在原生协议的基础上添加了一些额外的头信息,比如 service name,magic number 等。

使用 dubbo thrift 协议同样需要使用 thrift 的 idl compiler 编译生成相应的 java 代码,后续版本中会在这方面做一些增强。

依赖

<dependency>
    <groupId>org.apache.thrift</groupId>
    <artifactId>libthrift</artifactId>
    <version>0.8.0</version>
</dependency>

配置

所有服务共用一个端口 3

<dubbo:protocol name="thrift" port="3030" />

使用

可以参考 dubbo 项目中的示例代码

常见问题

  • Thrift 不支持 null 值,即:不能在协议中传递 null 值
12.3.0 以上版本支持 ↩
2Thrift 是 Facebook 捐给 Apache 的一个 RPC 框架 ↩
3. 与原生Thrift不兼容 ↩


ThriftProtocol也是提供了export和refer对外暴露服务和引用服务两个功能

(1)export:暴露服务,通过netty、mina或者grizaly对外暴露tcp服务

//通过dubboExport中提供的netty、mina或grizaly对外暴露tcp协议
    public <T> Exporter<T> export(Invoker<T> invoker) throws RpcException {

        // can use thrift codec only
        URL url = invoker.getUrl().addParameter(Constants.CODEC_KEY, ThriftCodec.NAME);
        // find server.
        String key = url.getAddress();
        // client can expose a service for server to invoke only.
        boolean isServer = url.getParameter(Constants.IS_SERVER_KEY, true);
        if (isServer && !serverMap.containsKey(key)) {
            serverMap.put(key, getServer(url));
        }
        // export service.
        key = serviceKey(url);
        DubboExporter<T> exporter = new DubboExporter<T>(invoker, key, exporterMap);
        exporterMap.put(key, exporter);

        return exporter;
    }

(2)refer:引用服务,与服务提供者建立长连接进行服务引用

//通过ThriftInvoker中提供的netty、mina或grizaly通过tcp协议与服务提供者建立连接
    public <T> Invoker<T> refer(Class<T> type, URL url) throws RpcException {

        ThriftInvoker<T> invoker = new ThriftInvoker<T>(type, url, getClients(url), invokers);

        invokers.add(invoker);

        return invoker;

    }



查看评论

发布:dubboPlus - 支持thrift原生协议(dubbo扩展)

基于dubbo2.5.3扩展高性能的、支持容错的、协议无关的RPC框架增加了对thrift原生协议支持,从而实现了跨语言调用(C++, Java, Python, PHP, Ruby, Erlang,...
  • candyzh
  • candyzh
  • 2016-08-09 11:41:07
  • 2136

dubbo_rpc包中thrift协议的使用过程

今天学习的是rpc包中的thrift协议的使用过程,以下是简单的调用步骤,在这里记录一下并做了点简单的说明。 1、首先初始化Protocol类 Protocol protocol = Extens...
  • qiaojiahe
  • qiaojiahe
  • 2015-10-21 11:05:38
  • 2092

dubbo dubbo-thrift thrift三种协议直观对比

最近在研究学习dubbo源码,下面对比一下dubbo dubbo-thrift thrift三种协议序列化后报文体积: 远程调用一个简单方法:Hello.hello("哈哈哈"); dub...
  • candyzh
  • candyzh
  • 2016-07-12 23:02:39
  • 2324

dubbo/dubbox(二)Thrift协议实现

dubbo采用Thrift协议其实官网上已经说的很明白了。具体配置文件我在官网上没有发现。特此写下该文章,备忘。 1.写Thrift 的IDL,生成JAVA文件。copy到服务端和客户端,客户端只拷贝...
  • wangyang_software
  • wangyang_software
  • 2015-12-22 17:18:15
  • 4647

对dubbo进行重构,支持thrift原生协议直接调用

整体思路:不入侵,不改变dubbo原来的任何特性,新增对thrift原生协议支持,原生协议的调用,同样可以进行原来的监控统计。 唯一丢失的特性,就是没有了软路由。因为原生协议不是使用dubbo客户端...
  • candyzh
  • candyzh
  • 2016-07-12 23:03:53
  • 1649

thrift官方代码+与dubbo集成支持原生thrift协议

  • 2017年05月26日 14:32
  • 701KB
  • 下载

gRPC, Thrift和Dubbo等3种RPC框架的比较

gRPC是Google开源的一款RPC框架(Go版本的实现),以protobuf作为IDL,通过protoc来编译框架代码。gRPC的Java实现的底层网络库是基于Netty开发而来,其Go实现是基于...
  • butterfly1009
  • butterfly1009
  • 2017-02-17 23:13:42
  • 1899

dubbo 支持的7种协议

1、dubbo 协议 (默认) 2、rmi 协议 3、hessian 协议 4、http 协议 5、webservice 协议 6、thrift 协议 7、memcached 协议 8、redi...
  • xiaojin21cen
  • xiaojin21cen
  • 2018-04-06 15:58:45
  • 58

ice-dubbo-thrift-grpc性能测试对比

本测试只是个人为了对rpc进行技术选型,测试可能不够严谨,对某些rpc的参数可能也不是最优,如果你知道更优的参数配置或者改进意见等,欢迎反馈给我magicdoom@gmail.com。另外代码有些地方...
  • whzhaochao
  • whzhaochao
  • 2016-05-14 16:11:06
  • 14569

自定义RPC通讯框架,实现dubbo远程RPC服务治理功能

写这篇文章的时候,dubbo已经出了很久了,这个是在dubbo开源之前由我负责设计开发的一套RPC调用框架,满足我们公司的业务增长需要。一下是我们的方案架构图:《具体的代码有机会会在我的GitHub上...
  • bbaiggey
  • bbaiggey
  • 2017-01-06 10:31:57
  • 793
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 68万+
    积分: 1万+
    排名: 2165
    Github
    访问:https://github.com/IAMTJW
    博客专栏
    最新评论