Thrift-java实例

作者:工程材料    来源:未知    发布时间:2019-12-18 22:35    浏览量:

SendRequestController:

功能描述:客户端与服务器端分别是两个应用,先启动服务器端,再启动客户端,实现执行客户端运行服务器端的加法方法。

Thrift实例1

服务端:

AG亚游国际 1

slf4j-api-1.6.1.jar

AG亚游国际 2

4、用eclips里面的ant工具把thrift-0.6.1编译出jar包

AG亚游国际,把解压后的文件夹放到eclipse的某个工程下如图:

8、先开启服务

9、再运行客户端

Thrift实例2

控制台显示:

TestThriftServlet:

AG亚游国际 3

5、把thrift脚本编译成java类

在运行中键入cmd打开dos界面,进到E:/soft/ccc/路径下,执行thrift-0.6.1.exe文件,命令如下:

AG亚游国际 4

3、到thrift官网下载

AG亚游国际 5

IThriftServer:由thrift工具编译生成

package com.test;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TBinaryProtocol.Factory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.server.TThreadPoolServer.Args;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;
public class TestService {
private void start(){
try {
TServerSocket serverTransport = new TServerSocket(8899);
ThriftCase.Processor processor = new ThriftCase.Processor(new ThriftCaseImpl());
//TBinaryProtocol – 二进制编码格式进行数据传输。
Factory protFactory = new TBinaryProtocol.Factory(true,true);
//TCompactProtocol 这种协议非常有效的,使用Variable-Length Quantity (VLQ) 编码对数据进行压缩
//Factory protFactory = new TCompactProtocol.Factory();
Args args = new Args(serverTransport);
args.processor(processor);
args.protocolFactory(protFactory);
TServer server = new TThreadPoolServer(args);
System.out.println("Starting server on port 8899 ...");
server.serve();
} catch (TTransportException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestService srv = new TestService();
srv.start();
}
}

原文链接:

如上图thrift-0.6.1文件夹放在名字是thrift的java工程的src下,有红叉不必管他,然后进入到thrift-0.6.1/lib/java中,右键点击build.xml

package com.test;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
import com.test.ThriftCase.Client;
public class TestClient {
private void start() {
        TTransport transport;
        try {
            transport = new TSocket("localhost", 8899);
            TProtocol protocol = new TBinaryProtocol(transport);
            Client client = new Client(protocol);
            
            
            UserRequest request=new UserRequest();
            request.setIdentitycard("32010619881231103X");
            
            transport.open();
            com.test.UserResponse urp=client.integralService(request);
            if(urp.code!=null&&!urp.code.equals("")){
            System.out.println("返回代码:"+urp.code+"; 参数是:"+urp.params.get("integral"));
            }
            transport.close();
        } catch (TTransportException e) {
            e.printStackTrace();
        } catch (TException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        TestClient c = new TestClient();
            c.start();
    }
}

解压:thrift-0.6.1.tar.gz

Pom.xml:

AG亚游国际 6

AG亚游国际 7

slf4j-log4j12-1.5.8.jar

AG亚游国际 8

请求:identitycard是身份证号

namespace是关键字表示命名空间,也就是java的包,java表示脚本转换成java类

服务端代码包含两个类:一个是业务逻辑类,一个是socket服务类。

TestThriftClientServlet:

namespace java com.test

下载:thrift-0.6.1.tar.gz和Thrift compiler for Windows (thrift-0.6.1.exe)

服务:

AG亚游国际 9

将三个文件拷贝到thrift工程的src/com/test/ 路径下。

运行说明:先运行服务端TestThriftServlet,再运行客户端TestThriftClientServlet,观察控制台打印出81,即:77+5=81

service ThriftCase
{
UserResponse integralService(1: UserRequest request)
}

返回代码:0; 参数是:10

命名空间:

1、业务逻辑描述:一个系统通过用户身份证号获取另一个系统里有关这个用户的积分。

在这个目录下会产生一个gen-java文件夹,文件夹中会产生相应的java类,

源码截图(源码在附件中):

如图点击Ant Build。在build.xml同路径下会产生一个build文件夹里面有生成的thrift-0.6.1.jar包。把这个包放到所做的工程的lib里就行了。

返回:code是成功标识 0表示成功;integral是用户拥有的积分

客户端:

ThriftCase.java

➠更多技术干货请戳:听云博客

Socket服务类

E:softccc>Thrift-0.6.1 –gen java text.thrift

ThriftServerController:

struct UserResponse
{
1:string code
2:map<string,string> params
}

 

  ThriftServerServiceImpl:

log4j-1.2.15,

6、编写服务端代码

package com.test;
import java.util.HashMap;
import java.util.Map;
public class ThriftCaseImpl implements ThriftCase.Iface{
public UserResponse integralService(UserRequest request)  {
try{
UserResponse urp=new UserResponse();
if(request.identitycard.equals("32010619881231103X")){
urp.setCode("0");
Map params=new HashMap();
params.put("integral", "10");
urp.setParams(params);
}
System.out.print("接收参数是:identitycard="+request.identitycard);
return urp;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
}

10、所需第三方包

struct UserRequest
{
1:string identitycard
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestService srv = new TestService();
srv.start();
}
控制台显示:
Starting server on port 8899 ...

2、首先编写脚本文件test.thrift:

业务逻辑类要实现ThriftCase.Iface服务接口

Params是返回的参数集合这里只用一个字段积分(integral)做例子;

7、客户端代码

UserResponse.java

UserRequest.java

public static void main(String[] args) {
        TestClient c = new TestClient();
            c.start();
    }

把thrift-0.6.1.exe和test.thrift文件放在同一个目录下并把路径写进环境变量Path中,如:E:/soft/ccc/路径下放入上述两个文件并把路径写进环境变量Path中。

上一篇:没有了
下一篇:没有了

相关新闻推荐

友情链接: 网站地图
Copyright © 2015-2019 http://www.kai-wang.com. AG亚游国际有限公司 版权所有