当前位置: 首页 > 图灵资讯 > 技术篇> Thrift实现C#调用Java开发步骤详解

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

来源:图灵教育
时间:2023-06-04 09:24:24

概述

Thrift实现C#调用Java开发步骤详细说明

详细

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

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

一、下载thrift

Thriftttentos安装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.thrift

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

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

将接口文件放入thrift目录:

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

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

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

在当前目录下可以看到生成的相应代码。

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

同样生成C#代码

thrift --gen csharp hello.thrift

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

五、编写java服务端代码

新建Maven项目,然后生成Thriftheloserviceen.java也加入工程,注意包名。

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

(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。

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

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:

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

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

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

请按任何按键继续..

调用成功!

可以看出,Thrift、ICE等跨语言RPC框架的开发步骤非常相似,生成的文件几乎相同,但与基于Servlet的Hessian等跨语言RPC框架有很大的不同。

注:本文将作权归作者所有,由demo大师出版,拒绝转载。转载需要作者的授权