IDEA Java Thrift Hello world-猫

IDEA Java Thrift Hello world-猫一、环境与配置1.操作系统Win102.IDEAJava3.Thriftversion0.10.0二、准备工作1.下载thrift.exe文件(本文附件中)2.配置环境变量D盘创建文件夹thrift把thrift.e

一、环境与配置

1.操作系统Win10

2.IDEA Java

3.Thrift version 0.10.0

二、准备工作

1.下载 thrift.exe 文件(本文附件中)

2.配置环境变量 

D盘创建文件夹 thrift  把 thrift.exe 文件放在下面 D:\thrift\thrift.exe

IDEA Java Thrift Hello world-猫

3.Maven 中加入 lib 库

 

<dependency>
    <groupId>org.apache.thrift</groupId>
    <artifactId>libthrift</artifactId>
    <version>0.10.0</version>
</dependency>

4.命令行下输入 thrift -version 检测是否配置成功

三、生成相应语言代码

1. 创建 .thrift 文件

目录结构

IDEA Java Thrift Hello world-猫
 

Hello.thrift

 

namespace java com.dokee.manager.core.thrift

enum RequestType {
    SAY_HELLO,   //问好
    QUERY_TIME,  //询问时间
}

struct HelloWordRequest {
    1: required RequestType type;  // 请求的类型,必选
    2: required string name;       // 发起请求的人的名字,必选
    3: optional i32 age;           // 发起请求的人的年龄,可选
}

exception RequestException {
    1: required i32 code;
    2: optional string reason;
}

// 服务名
service HelloWordHandle {
    string doAction(1: HelloWordRequest request) throws (1:RequestException qe); // 可能抛出异常。
}

 

基本语法与详细介绍请参考

http://www.jianshu.com/p/0f4113d6ec4b

2.生成对应代码

命令行下 cd 到 对应.thrift 文件目录中 ,然后输入 thrift –gen javaHello.thrift

会输出对应语言的代码

IDEA Java Thrift Hello world-猫

3.实现对应接口 

实现thrift 命令中生成的 接口 HelloWordHandle.Iface
IDEA Java Thrift Hello world-猫
HelloWordHandleImpl.java
package com.dokee.manager.core.thrift.impl;

import com.dokee.manager.core.thrift.HelloWordHandle;
import com.dokee.manager.core.thrift.HelloWordRequest;
import com.dokee.manager.core.thrift.RequestException;
import com.dokee.manager.core.thrift.RequestType;
import org.apache.thrift.TException;
import org.common5iq.util.Utils;

import java.util.Date;


public class HelloWordHandleImpl implements HelloWordHandle.Iface {
    // 实现这个方法完成具体的逻辑。
    public String doAction(HelloWordRequest request) throws RequestException, TException {
        System.out.println("Get request: " + request);
        if (Utils.isBlank(request.getName()) || request.getType() == null) {
            throw new RequestException();
        }
        String result = "Hello, " + request.getName();
        if (request.getType() == RequestType.SAY_HELLO) {
            result += ", Welcome!";
        } else {
            result += ", Now is " + new Date().toLocaleString();
        }
        return result;
    }
}

 

四、测试

1.创建服务器端

此次用java作为服务器端  HelloWordServer.java  也可用C++作为服务器端来测试

 



import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadedSelectorServer;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TNonblockingServerSocket;

/**
 * @author qifuguang
 * @date 15/9/11 16:07
 */
public class HelloWordServer {

    public static final int SERVER_PORT = 8989;

    public static void main(String[] args) throws Exception {
        TProcessor tprocessor = new HelloWordHandle.Processor(new HelloWordHandleImpl());
        // 传输通道 - 非阻塞方式
        TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(SERVER_PORT);

        //多线程半同步半异步
        TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(serverTransport);
        tArgs.processor(tprocessor);
        tArgs.transportFactory(new TFramedTransport.Factory());
        //二进制协议
        tArgs.protocolFactory(new TCompactProtocol.Factory());
        // 多线程半同步半异步的服务模型
        TServer server = new TThreadedSelectorServer(tArgs);
        System.out.println("HelloTThreadedSelectorServer start....");
        server.serve(); // 启动服务
    }
}(new HelloWordHandleImpl());
        // 传输通道 - 非阻塞方式
        TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(SERVER_PORT);

        //多线程半同步半异步
        TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(serverTransport);
        tArgs.processor(tprocessor);
        tArgs.transportFactory(new TFramedTransport.Factory());
        //二进制协议
        tArgs.protocolFactory(new TCompactProtocol.Factory());
        // 多线程半同步半异步的服务模型
        TServer server = new TThreadedSelectorServer(tArgs);
        System.out.println("HelloTThreadedSelectorServer start....");
        server.serve(); // 启动服务
    }
}
 
运行 HelloWordServer.java
 
控制台打印
IDEA Java Thrift Hello world-猫
 
 

2.创建 HelloClient.java
 
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;

/**
 * @author qifuguang
 * @date 15/9/11 16:13
 */
public class HelloWordClient {

    public static final String SERVER_IP = "localhost";

    public static final int SERVER_PORT = 8989;

    public static final int TIMEOUT = 30000;

    public static void main(String[] args) throws Exception {

        //设置传输通道,对于非阻塞服务,需要使用TFramedTransport,它将数据分块发送
        TTransport transport = new TFramedTransport(new TSocket(SERVER_IP,
                SERVER_PORT, TIMEOUT));
        //使用高密度二进制协议
        TProtocol protocol = new TCompactProtocol(transport);
        // 创建client
        HelloWordHandle.Client client = new HelloWordHandle.Client(protocol);
        transport.open();  // 建立连接
        // 第一种请求类型
        HelloWordRequest request = new HelloWordRequest()
                .setType(RequestType.SAY_HELLO).setName("winwill2012").setAge(24);
        System.out.println(client.doAction(request));

        // 第二种请求类型
        request.setType(RequestType.QUERY_TIME).setName("winwill2012");
        System.out.println(client.doAction(request));

        transport.close();  // 请求结束,断开连接
    }
}

运行 HelloClient.java 控制台打印

IDEA Java Thrift Hello world-猫
 
 
 
 
 
五、注意事项
 
1.客户端与服务器端传输协议一致 同时使用 TCompactProtocol 或者 TBinaryProtocol 不一直会报错
2.文件下载 Hello.thrift 等文件 以及 生成的相关代码 ,
链接: https://pan.baidu.com/s/1kVaGT6Z 密码: zeuq
链接: https://pan.baidu.com/s/1hsOmaaS 密码: fqqq
 

 

 

 

 

 

 

 

 

 

 

 

今天的文章IDEA Java Thrift Hello world-猫分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/67701.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注