概述

Thrift实现C#调用Java开发步骤详解

详细

Apache Thrift 是 Facebook 实现的一种高效的、支持多种语言的远程服务调用的框架。

类似的跨语言RPC框架还有ICE、Hessian、Protocol Buffer、Avro等。

一、下载thrift

参考博客 http://blog.csdn.net/gaowenhui2008/article/details/70694560

CentOS安装Thrift
官方文档地址:
http://thrift.apache.org/docs/install/centos

Apache Thrift 官方JAVA教程
官方教程的代码地址:
https://git1-us-west.apache.org/repos/asf?p=thrift.git;a=tree;f=tutorial;hb=HEAD

下载地址:http://thrift.apache.org/download

thrift-0.10.0.exe 用于编译Thrift中间文件生成对应语言代码的工具 (ps:我是在Linux环境里边安装的 Thrift)

thrift-0.10.0.tar.gz 包含Thrift各个语言的源码库,以及一些测试程序代码等

二、编译生产 .NET库(DLL)和JAVA库(jar)

解压thrift-0.10.0.tar.gz文件。

(1) 生成.NET库

打开工程:E:\thrift\thrift-0.10.0\lib\csharp\src\Thrift.sln 编译,即可生成Thrift.dll

我的环境是VS2017以及.NET 4.5

(2) 生成Java库

Java库是通过Ant构建的,需要安装Ant,安装步骤这里就不赘述了。

打开命令行CD到java库代码所在的路径:E:\thrift\thrift-0.10.0\lib\java(包含build.xml)

然后直接执行ant命令即可发现build目录下生成对应的jar文件

三、编写thrift中间文件hello.thrift

namespace java com.cnblogs.yjmyzz.demo.service.api.thrift
service ThriftHelloService{
string ping()
}

四、生成java和c#各自的接口文件

将接口文件放到thrift目录:

在thrift目录运行 thrift --gen java hello.thrift

可以看到在当前目录下会出现生成的对应代码。

同样生成C#的代码

thrift --gen csharp hello.thrift

五、编写java服务端代码

新建Maven项目,然后还要将生成的ThriftHelloService.java也加入到工程中,注意包名。

(1)编写接口实现类:

package com.cnblogs.yjmyzz.demo.service.api.thrift;

import org.apache.thrift.TException;

/**
*Created by on 2017/8/4
*/
public class ThriftHelloServiceImpl implements ThriftHelloService.Iface { @Override
public String ping() throws TException { return "service call done: ThriftHelloService.ping()123456"; }
}

(2)编写寄宿代码,启动并监听在指定端口:

package com.cnblogs.yjmyzz.demo.service.api.thrift;
/**
* Created by on 2017/8/4
*/
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;
import com.cnblogs.yjmyzz.demo.service.api.thrift.ThriftHelloService;
import com.cnblogs.yjmyzz.demo.service.api.thrift.ThriftHelloServiceImpl;
public class HelloServiceServer {
/**
* 启动 Thrift 服务器
* @param args
*/
public static void main(String[] args) {
try {
// 设置服务端口为 7911
TServerSocket serverTransport = new TServerSocket(7911);
// 设置协议工厂为 TBinaryProtocol.Factory
TBinaryProtocol.Factory proFactory = new TBinaryProtocol.Factory();
// 关联处理器与 Hello 服务的实现
TProcessor processor = new ThriftHelloService.Processor(
new ThriftHelloServiceImpl());
TThreadPoolServer.Args args1 = new TThreadPoolServer.Args(serverTransport);
args1.processor(processor);
args1.protocolFactory(proFactory); TServer server = new TThreadPoolServer(args1);
System.out.println("Start server on port 7911...");
server.serve();
} catch (TTransportException e) {
e.printStackTrace();
}
}
}

六、编写C#客户端代码

新建普通控制台项目,引入Thrift.dll;然后还要将生成的ThriftHelloService.cs也加入到工程中。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Thrift.Transport;
using Thrift.Protocol;
namespace ConsoleApp1.Properties
{
class ClientTest
{
static void Main(string[] args)
{
TTransport transport = new TSocket("localhost", 7911);
transport.Open();
TProtocol protocol= new TBinaryProtocol(transport);
ThriftHelloService.Client client = new ThriftHelloService.Client(protocol);
Console.WriteLine("ThriftHelloService client.ping().....");
Console.WriteLine(client.ping());
System.Console.WriteLine("call done : Hello World! --》"+ client.ping());
client.Dispose();
transport.Close();
}
}
}

七、运行

运行java服务端,HelloServiceServer.java:

运行C#客户端代码ClientTest.cs Ctrl+F5

请按任意键继续…

调用成功!

可以看到Thrift和ICE等跨语言RPC框架开发步骤非常相似,几乎相同,生成的文件也都差不多,但是和基于Servlet的Hessian这种跨语言RPC框架差别较大。

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

Thrift实现C#调用Java开发步骤详解的更多相关文章

  1. 《Tomcat与Java Web开发技术详解》思维导图

    越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...

  2. 用C#.NET调用Java开发的WebService传递int,double问题

    用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.double和D ...

  3. 用C#.NET调用Java开发的WebService传递int,double问题,出现java无法获得值!

    https://www.cnblogs.com/zhbsh/archive/2013/04/22/3035477.html 用C#.NET调用Java开发的WebService时,先在客户端封装的带有 ...

  4. 《手把手教你》系列技巧篇(四十)-java+ selenium自动化测试-JavaScript的调用执行-下篇(详解教程)

    1.简介 在实际工作中,我们需要对处理的元素进行高亮显示,或者有时候为了看清楚做跟踪鼠标点击了哪些元素需要标记出来.今天宏哥就在这里把这种测试场景讲解和分享一下. 2.用法 创建一个执行 JS 的对象 ...

  5. C#自制Web 服务器开发:mysql免安装版配置步骤详解分享

    mysql免安装版配置步骤详解分享 1.准备工作 下载mysql的最新免安装版本mysql-noinstall-5.1.53-win32.zip,解压缩到相关目录,如:d:\ mysql-noinst ...

  6. 【eclipse插件开发实战】 Eclipse插件开发6——eclipse在线翻译插件Translator开发实例详解

    Eclipse插件开发6--eclipse在线翻译插件Translator开发实例详解 在上一篇文章中讲到了一个简单的eclipse插件开发实例,主要是对插件工程的基本创建步骤进行了讲解,这篇文章当中 ...

  7. 《python开发技术详解》|百度网盘免费下载|Python开发入门篇

    <python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby  内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...

  8. Axis2开发webservice详解

    Axis2开发webservice详解 标签: javawebserviceAxis2 2015-08-10 10:58 1827人阅读 评论(0) 收藏 举报  分类: JAVA(275)  服务器 ...

  9. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

随机推荐

  1. ruby -- 修改rubymine的字体大小

     rubymine编辑器默认的字体特别小,如何修改rubymine当中的字体大小?  首先,进入 setting\ide setting\editor\colors&fonts\font    ...

  2. input输入框限制输入英文,数字,汉字

    <h1>js验证输入框内容</h1><br /><br /> 只能输入英文<input type="text" onkeyup ...

  3. CMOS DACs act as digitally controlled voltage dividers

    Digital potentiometers, such as Analog Devices’ AD5160, make excellent digitally controlled voltage ...

  4. win8升级8.1提示卸载sentinel runtime drivers

    Win8升级8.1时提示需卸载sentinel runtime drivers的解决方法 第一步:打开sentinelcustomer.safenet-inc.com/sentineldownload ...

  5. SharePoint_Config_Log file size

    Been doing a routine check of my servers, and noticed that our SharePoint server was lacking some fr ...

  6. python接口自动化25-发xml格式post请求

    前言 post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种) application/x-www-form-urlencoded appl ...

  7. Linux进程间通信—共享内存

    五.共享内存(shared memory) 共享内存映射为一段可以被其他进程访问的内存.该共享内存由一个进程所创建,然后其他进程可以挂载到该共享内存中.共享内存是最快的IPC机制,但由于linux本身 ...

  8. datagridview 单元格类型转换【备忘】

    datagridview  在设定列类型后,其下面所有行的该列都与设定的列类型相同. 在需要改变某一行的某个单元格时,遇到了一些问题,再次进行备忘: 之前在遇到该问题时参考别人的博客解决过,但是时间久 ...

  9. 数学图形(1.20)N叶草

    有N个叶子的草 相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.该软件免费开源.QQ交流群: 367752815 vertices = t = to (*PI) r = n ...

  10. 数学图形(1.19)Doppler spiral螺线

    一种左右对称的螺线 相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.该软件免费开源.QQ交流群: 367752815 vertices = t = *PI) to (*PI) ...