概述

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.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框架差别较大。

代码下载:http://www.demodashi.com/demo/10946.html

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

Thrift实现C#调用Java开发步骤详解相关推荐

  1. ubuntu apt安装java_Ubuntu 16.04 apt方式安装JDK并且配置Java开发环境详解

    安装完Ubuntu后最常用的环境安装就算Jdk了,如何简单方便地安装是象我这样的新手小白最头疼的,我经过学习后反向给大家,希望可以减少大家的学习时间,快速放到重要的事情上去! 安装默认JRE / JD ...

  2. java 开发模式详解_Java开发中的23种设计模式详解4

    其实每个设计模式都是很重要的一种思想,看上去很熟,其实是因为我们在学到的东西中都有涉及,尽管有时我们并不知道,其实在Java本身的设计之中处处都有体现,像AWT.JDBC.集合类.IO管道或者是Web ...

  3. java excel单元格数据格式_POI实战-java开发excel详解之单元格各类型数据读取

    2.复杂读取 2.1 单元格各类型数据读取 2.1.1 基本类型 在实际工作中,我们处理的Excel数据都不止限于字符型数据,更多的是数字.日期.甚至公式等. 下面是单元格类型说明: 类型 CELL_ ...

  4. Java开发SDK详解->SDK开发

    这里写目录标题 一.前言 二.详情 2.1 创建项目 2.2 开发代码 2.2.1 pom文件 2.2.2 SysUserClient 2.2.3 ClientAbstract 2.2.4 HttpU ...

  5. Android Studio安装与App开发步骤详解

    环境准备 使用的软硬件具体如下: Windows 7 Android Studio 3.3.2[简称:AS,从官网可以下载,或者使用低版本升级:help->check for update] J ...

  6. CentOS 6.4 搭建 Java 开发环境详解

    一.安装jdk 1.查看Linux自带的JDK是否已安装 java –version 如果出现openjdk,最好还是先卸载掉openjdk,在安装sun公司的jdk. 2.查看jdk信息 rpm - ...

  7. UAP开发步骤详解(很详细哦)---②单据向导开发

  8. 百度开放平台的第三方开发步骤详解

    1.登录百度网盘开放平台 https://pan.baidu.com/union#/ 2.创建应用 3.查看技术文档 https://pan.baidu.com/union/document/entr ...

  9. UAP开发步骤详解(很详细)--③单据向导完善

最新文章

  1. OpenGL实现通用GPU计算概述
  2. 2018年 第9届 蓝桥杯 Java B组 省赛真题详解及总结
  3. 大数据WEB阶段 (十)Response、ServletConfig、ServletContext、资源跳转三种方式
  4. Pycharm超使用快捷键
  5. wp7技术类网站汇总
  6. qml-创建可移动的模态弹出框
  7. ubuntu自定义菜单_如何自定义Ubuntu的每日消息
  8. 【转】LAMP网站架构方案分析【精辟】
  9. TinyXML学习记录及整理
  10. 【LeetCode笔记】剑指 Offer 45. 把数组排成最小的数(Java、字符串、Lambda)
  11. python图的字典表示_Python dict字典精讲
  12. 将a数组部分给b数组c语言,C语言第6章1 数组.ppt
  13. 标准 mysql 数据库 jdbc 的两种写法 懒汉式 和 饿汉式
  14. 清楚了解TCP三次握手和四次挥手的过程中各标志的含义
  15. 中国的码农们,沉睡了20年,该醒醒了
  16. c语言 双重取反的高级用途(提升代码效率)
  17. vue示例todos
  18. 原型工具Axure vs Mockplus ——表格对比 , 你选谁?
  19. 《NAT穿越(NAT-T)RFC3947文档》记录
  20. 在mybatis中怎么书写工具类,也就是创建一个sqlsessionFactory

热门文章

  1. mdk cubemx 移植RT-Thread Nano 至stm32f424zgt6
  2. 5009. tinyfsm有限状态机
  3. STM32驱动LCD实战
  4. 【Pre蓝桥杯嵌入式】如何直接使用LCD例程来作为赛场使用的工程
  5. STC51-C51基础知识
  6. 我的第一个MPI程序:利用矩形规则计算pi
  7. android 刷新标题栏,Android 自定义标题栏的实例详解
  8. java menu单击事件_TinyMCE自定义工具栏menuItem单击触发所有父项的单击事件
  9. 【Java数据结构与算法】第十六章 图
  10. C语言的那些秘密之---函数返回局部变量(转)