window go thrift

代码在GitHub上托管

https://github.com/xej520/xingej-thrift/tree/master/hw-thrift

环境说明

  • windows 10
  • Intellij IDEA
  • thrift-0.11.0.exe
  • 服务端用java实现
  • 客户端用go实现
  • 用例的作用是,客户端将字符串传递给服务器,服务器将字符串转换成大写后,返回给客户端
     
     
     

    创建maven工程(父模块)

    删除自带的src目录(目前没用,删掉)

    准备IDL文件

  • 创建目录thrift
  • 创建IDL文件hw.thrift
    namespace java com.test.thrift
    namespace  go pkg.service
    
    struct Data {
        1: string text;
    }
    
    service format_data {
        Data doFormat(1:Data data);
    }

    创建maven模块,用于存储生成的java版本的代码库

  • 利用thrift来生成java版本的代码库
    thrift --gen java -out ../java-thrift-idl/src/main/java hw.thrift
  • 生成的代码报错,是由于缺少libthrift库引起的,因此在pom.xml文件中,添加必要的依赖
    
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>hw-thrift</artifactId>
        <groupId>com.test.thrift</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    
    <artifactId>java-thrift-idl</artifactId>
    
    <dependencies>
        <dependency>
            <groupId>org.apache.thrift</groupId>
            <artifactId>libthrift</artifactId>
            <version>0.11.0</version>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

- 添加完依赖@Override 注解报错的话,可能是由于thrift的版本不一致引起的。

## 创建go模块,用于存储生成go版本的代码库
- 利用thrift来生成go版本的代码库
    thrift --gen go  -out ../go-thrift-idl hw.thrift
![](https://note.youdao.com/yws/public/resource/9c8584c6ec980aee585665c38a65bf9d/xmlnote/42EAB0BE237340D6A8989EEF383753DE/20079)
- 注意生成的代码是有问题的[原因具体不详]
  - 在hw.go文件中 oprot.Flush()抛异常,not enough arguments in call to oprot.Flush less... (Ctrl+F1)
  - 解决措施:原因是缺少context.Context类型的参数,刚好方法中已经有,直接添加上就可以了,改成oprot.Flush(ctx)
- 将生成的代码库pkg 拷贝到gopath的src路径下,这样客户端就可以使用代码库了,不然有可能找不到生成的代码库

## 创建maven模块,用于创建服务端
- 创建maven模块,java-thrift-server
- 更新pom.xml文件,添加对java-thrift-idl的依赖
- 编写FormatDataImpl实现hw.thrift定义的接口
- 编写sever, 实现thrift编程

## 创建go模块,用于go版本的客户端
- 创建go模块,go-thrift-client
- 编写业务逻辑

## 测试
- 启动服务器端
- 启动客户端   

&nbsp;
&nbsp;
&nbsp;
&nbsp;  

> 将服务端更改spring-boot 版本
> 也就是更新java-thrift-server 模块  

- 更新java-thrift-server模块的pom文件,为下面的形式  

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;

org.springframework.boot
spring-boot-starter-parent
1.5.3.RELEASE

4.0.0
java-thrift-server

org.springframework.boot
spring-boot-starter

com.test.thrift
java-thrift-idl
1.0-SNAPSHOT

```
- 添加appliaction.properties配置文件
> server.name=java-thrift-service
server.port=8082
- 更新FormatDataImpl文件,添加@Service注解,也就是交给spring 管理起来
- 创建thirift_socket包,创建ThriftServer文件,编写Thrift逻辑
- 可能会报错,如果是could not autowire. no bean of Iface的话,可以不用管
- 更新server文件,添加上@SpringBootApplication 注解,表明是启动类
- 测试
> 启动服务端
启动客户端

原文地址:http://blog.51cto.com/xingej/2167066

时间: 2024-10-18 10:54:06

window go thrift的相关文章

window 安装 thrift

1.下载thrift:http://thrift.apache.org/ 2.然后将该执行文件,保存到磁盘的文件夹下(你自己喜欢的,随便一个个目录下) 我的是(目录名少了个t,无妨): 3.把该执行文件配置到环境变量下(系统的path): 只需要配置到文件夹即可:即:path  = e:\bobo\thrif; 4.最后就可以在本机任何地方使用:thrift --gen java XXX.thrift 生产java 源码.

thrift 服务端linux C ++ 与客户端 windows python 环境配置(thrift 自带tutorial为例)

关于Thrift文档化的确是做的不好.摸索了很久才终于把跨linux与windows跨C++与python语言的配置成功完成.以下是步骤: 1)                 Linux下环境配置 l  完成thrift所依赖的其他软件包的安装:Boost.libtool.libevent.bison.flex 解压boost_1_55_0,进入boost_1_55_0目录下 chmod 777 bootstrap.sh chmod 777 ./tools/build/v2/engine/bu

Thrift安装手册

本篇是Thrift官网安装文档的翻译,原地址点击这里.Thrift之前是不支持Windows的.但是似乎0.9版本以后已经支持Window了.介绍了Thrift安装的环境要求以及在centos,Debian/Ubuntu,OS X和Windows下的安装过程.并提出了一些安装过程中可能遇到的问题和解决办法.适用于thrift0.9版本. 1 Thrift的环境要求 Apache的Thrift的编译器为支持可移植由C++语言编写而成.但在安装到某些系统中时要求有一定的环境要求.在下面的指南中选择你

Thrift总结(一)介绍

这段时间,一直在整理公司的内部 rpc 服务接口,面临的一个问题就是:由于公司内部的系统由几个不同的语言编写的.C# ,java,node.js 等,如何实现这些内部系统之间的接口统一调用,确实是比较麻烦,本来考虑用webapi 但是感觉内部系统之间用webapi 效率不高.最终,我们还是考虑引入Thrift ,通过Thrift整合各个不同的RPC服务.下面就Thrift 如何使用,做个简单的介绍,本人也是初次接触. 介绍 Thrift是一款由Fackbook开发的可伸缩.跨语言的服务开发框架,

Thrift官方安装手冊(译)

本篇是Thrift官网安装文档的翻译,原地址点击这里.Thrift之前是不支持Windows的.可是似乎0.9版本号以后已经支持Window了.介绍了Thrift安装的环境要求以及在centos,Debian/Ubuntu,OS X和Windows下的安装过程.并提出了一些安装过程中可能遇到的问题和解决的方法.适用于thrift0.9版本号. 1 Thrift的环境要求 Apache的Thrift的编译器为支持可移植由C++语言编写而成.但在安装到某些系统中时要求有一定的环境要求.在以下的指南中

Thrift是一款由Fackbook开发的可伸缩、跨语言的服务开发框架

这段时间,一直在整理公司的内部 rpc 服务接口,面临的一个问题就是:由于公司内部的系统由几个不同的语言编写的.C# ,java,node.js 等,如何实现这些内部系统之间的接口统一调用,确实是比较麻烦,本来考虑用webapi 但是感觉内部系统之间用webapi 效率不高.最终,我们还是考虑引入Thrift ,通过Thrift整合各个不同的RPC服务.下面就Thrift 如何使用,做个简单的介绍,本人也是初次接触. 介绍 Thrift是一款由Fackbook开发的可伸缩.跨语言的服务开发框架,

thrift在windows的编译/安装--c++版

前言: thrift是出于Facebook的rpc网络编程框架, 其对跨平台和多语言的支持优于google protobuf, 但thrift在java/c#语言上应用比较多, 资料也丰富, 在windows平台的c++这块, 资料相对较少, 而且编译也麻烦. 这篇博客主要记录对thrift在windows上的编译和使用过程, 不涉及原理, 也不具体涉及应用.如有不足, 请各位指正. 执行过程1. 下载并安装Visual Studionotice: visual studio 有windows版

Thrift官方安装手册(译)

本篇是Thrift官网安装文档的翻译,原地址点击这里.Thrift之前是不支持Windows的.但是似乎0.9版本以后已经支持Window了.介绍了Thrift安装的环境要求以及在centos,Debian/Ubuntu,OS X和Windows下的安装过程.并提出了一些安装过程中可能遇到的问题和解决办法.适用于thrift0.9版本. 1 Thrift的环境要求 Apache的Thrift的编译器为支持可移植由C++语言编写而成.但在安装到某些系统中时要求有一定的环境要求.在下面的指南中选择你

Thrift架构介绍

Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现. 架构 Thrift实际上是实现了C/S模式,通