Thrift实现C#调用Java开发步骤详细说明
详细
Apache Thrift 是 Facebook 一个高效的远程服务调用框架,支持多种语言。
类似的跨语言RPC框架和ICE、Hessian、Protocol Buffer、Avro等。
一、下载thriftThriftttentos安装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中间文件helol.thriftnamespace 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项目,然后生成Thriftheloserviceen.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;然后生成的Thriftheloservice.工程中也加入了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#客户端代码Clientettestestet运行C#客户端代码.cs Ctrl+F5
请按任何按键继续..
调用成功!
可以看出,Thrift、ICE等跨语言RPC框架的开发步骤非常相似,生成的文件几乎相同,但与基于Servlet的Hessian等跨语言RPC框架有很大的不同。
注:本文将作权归作者所有,由demo大师出版,拒绝转载。转载需要作者的授权