Thrift实现C#调用Java开发步骤详解
2018-02-23 07:59
513 查看
概述
Thrift实现C#调用Java开发步骤详解
详细
代码下载:http://www.demodashi.com/demo/10946.html
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.thriftservice 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框架差别较大。
代码下载:http://www.demodashi.com/demo/10946.html
注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权
相关文章推荐
- Thrift实现C#调用Java开发步骤详解
- Thrift学习(1)C#调用Java开发步骤详解
- 利用Axis2开发WebService(3)---用Java实现调用WebService的客户端程序
- java-web国际化开发基础和实现国际化显示的登入页面详解
- 巧用C#做中间语言 实现Java调用.net DLL(转)
- 巧用C#做中间语言 实现Java调用.net DLL的方法
- java中调用c(c++)写的dll文件的实现及步骤
- Android NDK开发(1)----- Java与C互相调用实例详解
- 黑马程序员之asp.net学习笔记:巧用C#做中间语言 实现java调用.net
- Android NDK开发(1)----- Java与C互相调用实例详解
- Android NDK开发(1)----- Java与C互相调用实例详解
- Android 开发 调用图库选择图片实现和参数详解
- java中调用c(c++)写的dll文件的实现及步骤
- Android JNI 使用的数据结构JNINativeMethod详解 ||建立Android SDK下的JNI、JAVA应用完整步骤---Android JAVA调用C++代码
- Android NDK开发(1)----- Java与C互相调用实例详解
- 我用纯C语言开发的中英文混合分词服务器3.0正式发布,词库190多万词,每秒切分5万+,同时提供 c、java、C#、delphi、js调用范例
- Ubuntu Feisty 下开发 JNI 应用步骤 (Java调用C/C++的技术)
- java中使用C++指针实现java调用C#
- C#调用java axsi开发的webservice
- 通过COM组件方式实现java调用C#写的DLL文件 转