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开发步骤详解的更多相关文章
- 《Tomcat与Java Web开发技术详解》思维导图
越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...
- 用C#.NET调用Java开发的WebService传递int,double问题
用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.double和D ...
- 用C#.NET调用Java开发的WebService传递int,double问题,出现java无法获得值!
https://www.cnblogs.com/zhbsh/archive/2013/04/22/3035477.html 用C#.NET调用Java开发的WebService时,先在客户端封装的带有 ...
- 《手把手教你》系列技巧篇(四十)-java+ selenium自动化测试-JavaScript的调用执行-下篇(详解教程)
1.简介 在实际工作中,我们需要对处理的元素进行高亮显示,或者有时候为了看清楚做跟踪鼠标点击了哪些元素需要标记出来.今天宏哥就在这里把这种测试场景讲解和分享一下. 2.用法 创建一个执行 JS 的对象 ...
- C#自制Web 服务器开发:mysql免安装版配置步骤详解分享
mysql免安装版配置步骤详解分享 1.准备工作 下载mysql的最新免安装版本mysql-noinstall-5.1.53-win32.zip,解压缩到相关目录,如:d:\ mysql-noinst ...
- 【eclipse插件开发实战】 Eclipse插件开发6——eclipse在线翻译插件Translator开发实例详解
Eclipse插件开发6--eclipse在线翻译插件Translator开发实例详解 在上一篇文章中讲到了一个简单的eclipse插件开发实例,主要是对插件工程的基本创建步骤进行了讲解,这篇文章当中 ...
- 《python开发技术详解》|百度网盘免费下载|Python开发入门篇
<python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby 内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...
- Axis2开发webservice详解
Axis2开发webservice详解 标签: javawebserviceAxis2 2015-08-10 10:58 1827人阅读 评论(0) 收藏 举报 分类: JAVA(275) 服务器 ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
随机推荐
- Codeforces Round #245 (Div. 2) B. Balls Game 并查集
B. Balls Game Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/430/problem ...
- SqlServer Base64解码中文
最近在做一个和拥有TurboCRM相关的项目,其中需要取出客户信息的联系人字段,经过查看,这个字段在存入时用Base64加密过了 这个功能在应用层实现是很方便的,但是由于一些特殊原因,只能放到SqlS ...
- Windows7 无法访问共享文件,域访问解决方法。
1.开始——>运行——>gpedit.msc 打开[本地组策略编辑器] 2.计算机配置——>Windows设置——>安全设置——>本地策略——>安全选项——> ...
- mysql select语句执行顺序
SELECT语句定义 一个完成的SELECT语句包含可选的几个子句. SELECT语句的定义如下: <SELECT clause> [<FROM clause&g ...
- mysql 实验
http://yangyaru0108.blog.51cto.com/6616699/1205001
- JDK JRE区别
JDK里面的工具也是用JAVA编写的,它们本身运行的时候也需要一套JRE,如C:/Program Files/Java/jdk1.5.x/目录下的JRE.而C:/Program Files/Java/ ...
- s:iterator循环输出数字
1.在action里加上maxNum属性,GET SET方法2.第一种写法(推荐) <s:iterator value="new int[maxNum]" status=&q ...
- 分享开源 Markdown 编辑器 Mditor 的「桌面版」
简单说明 Mditor 最早只有「组件版」,随着「桌面版」的发布,Mditor 目前有两个版本: 可嵌入到任意 Web 应用的 Embed 版本,这是一桌面版的基础,Repo: https://git ...
- jenkins中“Poll SCM”和“Build periodically”的区别
Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作.我的配置如下: */5 * * * * (每5分钟检查一次源码变化) B ...
- ZentaoPMS 系统的优先级以及修改
王颖2015/10/08 最新版本中,严重程度1.2.3.4分别代表什么意思?还有优先级中1.2.3.4分别代表什么意思? 回复 石洋洋2015/10/08 1 2 3 4 都代表不同的级别,一般是1 ...