配置Apache Thrift环境可以查看:Apache Thrift配置环境
这个环境仅仅用来根据thrift文件生成其他语言的代码,和开发环境无关。
官方教程的代码地址:
https://git1-us-west.apache.org/repos/asf?p=thrift.git;a=tree;f=tutorial;hb=HEAD
上面地址的文件有两种查看方式,blob和raw,blob适合在线看,raw适合复制保存。
从上面地址将最下面的shared.thrift
和tutorial.thrift
下载到本地,然后在终端执行:
thrift -r –gen java tutorial.thrift
执行后会出现一个gen-java
文件夹,里面包含两个包,每个包都有几个生成的Java文件,文件结构如下:
gen-java
├─shared
│ SharedService.java
│ SharedStruct.java
│
└─tutorial
Calculator.java
InvalidOperation.java
Operation.java
tutorialConstants.java
Work.java
我在写这个例子的时候,使用了Maven,创建了3个独立的项目,项目结构如下:
thrift-core是thrift生成的代码,client是客户端,server是服务端,client和server都引用了thrift-core。
将上面生成的gen-java
中的代码放在了thrift-core
项目中,该项目的pom.xml
添加了一个依赖:
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>1.0.0</version>
</dependency>
如果你看过上一篇Apache Thrift配置环境,你就会知道我这里用的1.0.0
版本还没有正式发布,所以本文最后会将所有用到的东西打包提供下载。
加上上面的依赖后,gen-java
生成的代码才不会报错。
client和server代码都来自官方教程,教程地址:
http://thrift.apache.org/tutorial/java
官方源码地址:
https://git1-us-west.apache.org/repos/asf?p=thrift.git;a=tree;f=tutorial/java/src;h=d56632301e9f9ff6c4ae5a5fd0f09bbb1c481ad3;hb=HEAD
这里提供官方源码地址,主要是因为有个关键的CalculatorHandler
类并没有在官方教程中直接出现。
官方教程中服务器提供了两种方式,一般方式(simple)和TSSL方式(secure)。
simple方式很简单就能运行,但是TSSL方式需要用到安全证书。
你可以看看官方教程源码,其中服务端有下面一行代码:
params.setKeyStore("../../lib/java/test/.keystore", "thrift", null, null);
这里的.keystore
是私钥,"thrift"
是私钥的口令。
在客户端中:
params.setTrustStore("../../lib/java/test/.truststore", "thrift", "SunX509", "JKS");
这里的.truststore
是公钥,"SunX509"
是公钥的口令,我们需要通过key-tool
工具来生成私钥和公钥。
整个使用key-tool
工具的过程如下.
输入下面的命令生成私钥,这里的私钥名字是.keystore
,名字可以随便写,但是整个过程都要保持名字一致:
keytool -genkeypair -alias certificatekey -keyalg RSA -validity 365 -keystore .keystore
输入上面的命令后按照提示进行操作。这里需要注意,最后一步的certificatekey
的口令最好和上面的口令一致,否则可能会遇到其他问题。
输入下面的命令生成server.cer
证书:
keytool -export -alias certificatekey -keystore .keystore -rfc -file server.cer
输入下面的命令生成.truststore
:
keytool -import -alias certificatekey -file server.cer -keystore .truststore
上面的过程仅仅是为了生成我们需要的.keystore
和.truststore
,更多的细节可以自己查询。
生成后将这两个文件分别放到server和client中,修改路径和密码,做好这些之后,程序就能启动了。
启动JavaServer
后:
Starting the simple server…
Starting the secure server…
运行JavaClient
后:
ping()
1+1=2
Invalid operation: Cannot divide by 0
15-10=5
Check log: 5
此时JavaServer
:
ping()
add(1,1)
calculate(1, {DIVIDE,1,0})
calculate(1, {SUBTRACT,15,10})
getStruct(1)
为了方便大家了解上面的过程和对比官方文档进行学习,本文提供源码下载。
http://pan.baidu.com/s/1qW3P320
源码使用方式,首先你要会Maven,而且还要配置好mvn,将下载的压缩文件解压后,在解压的目录中打开命令行,使用如下命令安装1.0.0
版本的thrift:
mvn install:install-file -Dfile=libthrift-1.0.0.jar -DpomFile=libthrift-1.0.0.pom
安装完成后,导入3个thrift-xxx项目,先运行thrift-server
,在运行thrift-client
即可。
推荐阅读:Apache Thrift - 可伸缩的跨语言服务开发框架
由于有这篇文章存在,所以本文没有去讲代码的细节。