首页 > 其他分享 >Thrift使用实例

Thrift使用实例

时间:2023-05-30 17:36:38浏览次数:32  
标签:示例 使用 实例 import new thrift 服务端 Thrift

当然!这是三个使用Java实现的Thrift示例代码,用于演示Thrift的基本用法和通信模式:

示例1:简单的服务端和客户端

在此示例中,我们将创建一个简单的Thrift服务端和客户端,客户端向服务端发送请求并接收响应。

Thrift定义文件(.thrift文件):

namespace java com.example.thriftdemo

service GreetingService {
    string sayHello(1: string name)
}

服务端实现类

import org.apache.thrift.TException;
import com.example.thriftdemo.*;

public class GreetingServiceImpl implements GreetingService.Iface {
    @Override
    public String sayHello(String name) throws TException {
        return "Hello, " + name + "!";
    }
}

服务端启动类

import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import com.example.thriftdemo.*;

public class Server {
    public static void main(String[] args) {
        try {
            TServerTransport serverTransport = new TServerSocket(9090);
            GreetingService.Processor processor = new GreetingService.Processor(new GreetingServiceImpl());

            TServer server = new TSimpleServer(new TServer.Args(serverTransport).processor(processor));

            System.out.println("Server started...");
            server.serve();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

客户端实现类

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 com.example.thriftdemo.*;

public class Client {
    public static void main(String[] args) {
        try {
            TTransport transport = new TSocket("localhost", 9090);
            transport.open();

            TProtocol protocol = new TBinaryProtocol(transport);
            GreetingService.Client client = new GreetingService.Client(protocol);

            String result = client.sayHello("John");
            System.out.println(result);

            transport.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在示例1中,我们定义了一个名为GreetingService的Thrift服务,其中包含一个名为sayHello的RPC方法。

服务端实现类GreetingServiceImpl实现了自动生成的接口GreetingService.Iface,并重写了sayHello方法。在该方法中,我们构造欢迎消息并返回给客户端。

服务端启动类创建了一个TServerTransport来监听指定的端口,并创建了GreetingService.Processor来处理请求。然后,创建一个TSimpleServer实例并启动服务。

客户端实现类创建了一个TTransport来连接到服务端的指定地址和端口,并使用TBinaryProtocol和GreetingService.Client来创建客户端代理。然后,调用sayHello方法发送请求并接收响应,并将结果打印出来。

运行服务器和客户端代码后,您将看到客户端成功向服务端发送请求,并接收到服务端返回的欢迎消息。

示例2:使用自定义数据类型

在此示例中,我们

将使用自定义的Thrift结构体和枚举类型来定义服务的输入和输出。

Thrift定义文件(.thrift文件):

namespace java com.example.thriftdemo

struct Person {
    1: required string name,
    2: required i32 age,
    3: optional string email
}

enum Gender {
    MALE,
    FEMALE,
    OTHER
}

service PersonService {
    void savePerson(1: Person person),
    Person getPerson(1: string name),
    list<Person> getAllPersons(),
    Gender getGender(1: Person person)
}

服务端和客户端的实现类与示例1中的代码相同,只需在代码中使用新的Thrift定义文件。

示例3:使用传输层和协议

在此示例中,我们将使用Thrift提供的不同传输层和协议来演示不同的通信方式。

服务端和客户端实现类与示例1中的代码相同,只需在代码中使用不同的传输层和协议。

以下是一个使用TServerSocket和TBinaryProtocol的示例:

TServerTransport serverTransport = new TServerSocket(9090);
TProtocolFactory protocolFactory = new TBinaryProtocol.Factory();
TServer server = new TSimpleServer(new TServer.Args(serverTransport).protocolFactory(protocolFactory).processor(processor));

以下是一个使用TNonblockingServerSocket和TCompactProtocol的示例:

TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(9090);
TProtocolFactory protocolFactory = new TCompactProtocol.Factory();
TServer server = new TNonblockingServer(new TNonblockingServer.Args(serverTransport).protocolFactory(protocolFactory).processor(processor));

这些示例代码演示了Thrift在Java中的基本用法和通信模式。请确保您已正确配置Thrift和相关依赖项,并根据需要更改主机和端口。

标签:示例,使用,实例,import,new,thrift,服务端,Thrift
From: https://www.cnblogs.com/lukairui/p/17443845.html

相关文章

  • CSS 删除线:在 CSS 中使用文本装饰和划线
    CSS删除线是一个CSS属性,它使文本看起来像是被删除线一样,就像这样。在网络开发和写作中,这经常用于表示文本已被删除或不再相关。但它也可以用于不同的事情。删除线可以应用于span元素、段落、div、显示内联块或任何其他需要文本修饰的元素。除了下划线、斜体和粗体,CSS删除线也......
  • leetcode Kth Largest Element in a Stream——要熟悉heapq使用
    703.KthLargestElementinaStreamEasyDesignaclasstofind thekthlargestelementinastream.Notethatitisthekthlargestelementinthesortedorder,notthekthdistinctelement.Your KthLargest classwillhaveaconstructorwhichacceptsanin......
  • 漏洞扫描工具Nessus详细使用教程
    漏洞扫描工具Nessus详细使用教程zkzq于 2022-02-0918:14:35 发布28574 收藏 195分类专栏: 黑客工具 文章标签: 网络安全 web安全 渗透测试版权黑客工具专栏收录该内容11篇文章13订阅订阅专栏零基础学黑客,搜索公众号:白帽子左一1原文地址......
  • Dubbo使用实例
    下面是一个使用Java实现的Dubbo示例代码,包括服务提供者和服务消费者:首先,您需要确保已安装ZooKeeper,并且ZooKeeper服务器正在运行。接下来,您可以使用以下示例代码创建Dubbo的服务提供者和服务消费者:服务提供者示例代码:接口定义:publicinterfaceGreetingService{String......
  • .net调用动态库NationECCode.dll使用电子凭证二维码解码接口
    .net调用动态库NationECCode.dll使用电子凭证二维码解码接口 C#.net调用示例代码:[DllImport("NationECCode.dll",CallingConvention=CallingConvention.StdCall)]publicstaticexternvoidNationEcTrans(stringurl,stringinput,IntPtroutput);......
  • 如何使用ComboBox以获取用户的单选并可编辑
    如何使用ComboBox以获取用户的单选并可编辑ComboBox是一种单选下拉框,和ChoiceBox很类似。ComboBox不仅可以接收用户的一个选项,还可以提供可编辑框,让用户输入内容。效果展示示例代码importjavafx.application.Application;importjavafx.geometry.Insets;importjava......
  • python中如何使用正则表达式查询字符串
    '''Createdon2019年12月2日@author:hp''''''上一篇文章介绍了那么多关于正则表达式的用法,现在终于到了python中如何使用正则表达式了,不急,请诸君慢慢来''''''之前在讲字符串时,已经说过了字符串的格式化输出,大家没看的可以看我的上一篇文章格式化输出时,是含有模式串......
  • #yyds干货盘点#Linux编辑器vim使用
    vim:是一款编辑器,只负责写代码;相当于windows的记事本;gcc:是一款编译器,只负责程序的翻译;gdb:是一款调试器,只负责程序的调试;vim是一个功能强大的多模式编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立、编辑、显示文本文件。Vim没有菜单,只有命令。命令模式(默认):输入的任何......
  • vues全局使用WebSocket
    //import{showInfoMsg,showErrorMsg}from'@/utils/popInfo'//importElementUIfrom'element-ui';import{Toast}from'vant';functioninitWebSocket(baseObj){console.log(baseObj)//constwsUri=WS_API+&quo......
  • SwiftUI 使用contentShape()控制点击区域
    当我们向一个view添加TapGesture时,就会发现“有内容”的区域是可以点击的。“有内容”指的是有图片、文字、背景颜色的区域。而空白区域,是不能触发点击回调的。比如:structContentView:View{varbody:someView{VStack(spacing:124){Image(sys......