使用Mac编写Thirft的HelloWorld项目

news2024/11/19 11:22:47

前言

最近在hive新增Thirft接口,于是学习了一下Thirft的使用

步骤

准备工作

  1. brew install thrift安装thrift
  2. 创建maven项目并引入依赖
    <dependency>
      <groupId>org.apache.thrift</groupId>
      <artifactId>libthrift</artifactId>
      <version>0.12.0</version>
    </dependency>
  1. 根据thrift文件生成java基类

在resource下创建一个hello.thrift文件

namespace java service.demo
service service.demo.HelloWorld{
    string sayHello(1: string param)
}

进入resource,thrift -r -gen java hello.thrift会在当前路径创建出一个gen-java.service.demo的文件夹。文件夹下面有Hello.java文件,将其移动到main目录的service.demo包中
在这里插入图片描述

编写Java实现

  1. 实现IFace接口
package service.demo;

import org.apache.thrift.TException;
public class HelloWorldIfaceImpl implements HelloWorld.Iface {
    public String sayHello(String param) throws TException {
        return "hello! "+ param;
    }
}

  1. 构建服务端并启动
package service.demo;

import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;


public class HelloWorldServer {
    public static void main(String[] args) {
        try {
            System.out.println("Server Starting....");
            // TServer的参数,并添加需要的处理过程和协议
            TServer.Args tArgs = new TServer.Args(new TServerSocket(666));
            // 1.过程
            TProcessor tprocessor = new HelloWorld.Processor<HelloWorld.Iface>(new HelloWorldIfaceImpl()); // 构造server的处理过程
            tArgs.processor(tprocessor);
            // 2.协议
            tArgs.protocolFactory(new TBinaryProtocol.Factory()); // 选用Protocol协议
            // 构建server并启动
            TServer server = new TSimpleServer(tArgs);
            server.serve();
        }catch (TTransportException e) {
            e.printStackTrace();
        }
    }
}

启动后,开源看到日志输出
在这里插入图片描述
3. 创建客户端并访问服务端

package service.demo;

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;

public class HelloWorldClient {
    public static void main(String[] args) {
        System.out.println("Client starting....");
        TTransport transport = null;
        try {
            // 绑定通信端口
            transport = new TSocket("localhost", 666, 30000);
            transport.open();
            // 构建协议,注意和服务端一致
            TProtocol protocol = new TBinaryProtocol(transport);
            // 创建客户端
            HelloWorld.Client client = new HelloWorld.Client(protocol);
          	// 客户端请求服务端,获得结果并输出
            String result = client.sayHello("Spider-Man");
            System.out.println(result);
        } catch (TTransportException e) {
            e.printStackTrace();
        } catch (TException e) {
            e.printStackTrace();
        } finally {
            if (null != transport) {
                transport.close();
            }
        }
    }
}

运行后成功拿到结果
在这里插入图片描述

总结

Server

负责连接调度、服务的生命周期,定义接口是TServer

  • TSimpleServer:简单的阻塞服务端
  • TThreadPoolServer:使用线程池的处理请求的阻塞服务端
  • THsHaServer:使用线程池处理请求的基于 NIO 的非阻塞服务端
  • TThreadedSelectorServer:使用多种线程池的基于 NIO 的非阻塞服务端

Processor

处理请求,具体的实现由生成的代码处理,定义接口是 TProcessor

  • TBaseProcessor:同步处理的 Processor
  • TBaseAsyncProcessor:异步处理的 Processor
  • TMultiplexedProcessor:支持多个服务的同步 Processor

Protocol

请求协议,数据的编解码实现,定义接口是 TProtocol

  • TBinaryProtocol:二进制协议
  • TCompactProtocol:压缩协议
  • TJSONProtocol:JSON 格式协议
  • TMultiplexedProtocol:支持多个 Processor 的封装协议,依赖于其他协议

Transport

底层的连接,提供了读写的抽象实现;服务端定义是 TServerTransport

  • TServerSocket: 基于 ServerSocket 的服务端 Transport
  • TNonblockingServerSocket:基于 ServerSocketChannel 的服务端 Transport
  • TSaslTransport:支持 SSL 加密的 Transport

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

led护眼灯哪种品牌质量好?2022什么牌子的护眼灯最好推荐

现在绝大部分台灯都是使用led灯珠作为发光源&#xff0c;这不仅仅是led灯珠本身的优秀&#xff0c;也更是市场的选择&#xff0c;无论是光线照度、显色性&#xff0c;还是亮度、色温的可调控性&#xff0c;led护眼灯都有非常明显的优势&#xff0c;对保护眼睛起到非常大的作用。…

微信小程序开发平台

微信小程序开发平台顾名思义就是一个可以开发小程序的地方。 微信小程序开发平台&#xff1a;【电脑浏览器输入3M.FKW.COM了解详情】 适合群体&#xff1a;企业、机构、个体户 微信小程序开发平台方式&#xff1a; 自建——可以通过套用小程序模板&#xff0c;利用拖拽式小…

ADSP-21489的开发详解:VDSP+自己编程写代码开发(3-可能出现的故障和解决办法)

如果连接失败怎么办&#xff1f;软件报错&#xff0c;无法进入上图所示的状态&#xff1f;不用担心&#xff0c;ADI 的 Visual DSP软件提供了自带的 TEST 功能&#xff0c;能通过软件分析&#xff0c;得出故障原因&#xff0c;并排除。 发现 ADI 仿真器连不上开发板&#xff0c…

浏览器执行过程与V8引擎执行原理(无惧面试)

前言&#xff1a;一文带你理解&#xff0c;浏览器渲染过程以及V8引擎背后执行原理&#xff0c;让你知道页面在浏览器上显示出来背后都做了什么事情。这将是一个js高级系列第一篇&#xff0c;这将会为之后的闭包&#xff0c;作用域链&#xff0c;原型等让人迷惑的知识打基础。感…

使用IDEA 进行 安卓开发

使用IDEA 进行 安卓开发 前言 以前使用Eclipse 进行 Android 开发&#xff0c;感觉对新手来说实在是太不友好了&#xff0c;又是Android SDK&#xff0c;有是配 gradle 等一系列的东西&#xff0c;对与新手而言&#xff0c;总是遗漏。或者版本对不上&#xff0c;一堆问题&…

.net core 读取配置的几种方式

json配置文件示例 {"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"Account": {"username": "zhangsan","password":&quo…

arXiv2022-12 | FLIP:Scaling Language-Image Pre-training via Masking

凯明团队新作。 论文地址&#xff1a;https://arxiv.org/abs/2212.00794 一、问题 Even using high-end infrastructures, the wall-clock training time is still a major bottleneck hindering explorations on scaling vision-language learning. 即使使用高端的基础设施…

人工智能:声纹相关基础概念介绍

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

移动端开发——APP端上H5容器化建设

1. 背景 当前移动端和前端的结合愈加紧密&#xff0c;尤其是在偏重活动运营的电商App中&#xff0c;受制于App版本审核&#xff0c;具备研发成本低、可灵活发布等特点的H5页面受到青睐&#xff0c;使其在APP端上承接了越来越多的业务。然而H5页面本身也存在一些亟需解决的问题…

nginx配置错误三例漏洞-

路径&#xff1a;nginx/insecure-configuration 运行成功后&#xff0c;Nginx将会监听8080/8081/8082三个端口&#xff0c;分别对应三种漏洞。 8080&#xff1a;CRLF注入漏洞 8081&#xff1a; 目录穿越漏洞 8082&#xff1a; add_header被覆盖 $uri导致的CRLF注入漏洞 Nginx…

股票分时成交明细接口的数据怎么看?

今天的文章我们主要针对于股票日线级别的行情数据&#xff0c;介绍了一些获取和处理的方法&#xff0c;其实最原始的数据是交易明细数据&#xff0c;level2行情软件的各种周期和统计的数据都是通过明细数据跨周期转换而形成的&#xff0c;比如分钟K线、小时K线、当日成交量、成…

基于STM32蓝牙控制的app智能台灯设计

提示&#xff1a;记录毕设 文章目录前言一、任务书1.1设计(研究)目标:1.2设计(研究)内容:二、代码思路三、硬件设计3.1总体设计3.2蓝牙部分设计四、联系我们五、部分代码喜欢请点赞哦&#xff01;前言 基于STM32蓝牙控制的app智能台灯设计&#xff0c;主控使用STM32F103ZET6&a…

web服务器及IDEA部署Tomcat服务器

目录 一、程序开发体系结构 1.1 C/S体系结构 1.2 B/S体系结构 二、Web服务器 2.1 概念 2.1.1 什么是Web 2.1.2 什么是Web服务器 2.2 常见Web服务器 2.3 Tomcat服务器 2.3.1 Tomcat的下载 2.3.2 Tomcat的安装 2.3.3 Tomcat的目录结构 2.3.4 Tomcat的启动 2.3.5 To…

MFC树控件的属性和初始化(基于对话框的编程)

目录 一、控件属性 1.找控件Tree Control 2.Has Lines和Has Buttons属性 3.Lines At Root属性 二、代码操作Tree Control显示内容 1.添加Tree Control变量 2.在OnInitDialog中添加初始化代码 3.设置图标 3.1导入icon 3.2 写入加载图片代码 3.3添加节点 4.设置默认选…

抗击疫情静态HTML网页作业作品 大学生抗疫感动专题页设计制作成品 简单DIV CSS布局网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

HTML期末大作业(HTML+CSS+JavaScript响应式游戏资讯网站bootstrap网页)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

12月5日:thinkphp模板

今天学习ThinkPHP中的模板部分内容 接口开发&#xff0c;看不到dom结构&#xff0c;页面信息都是通过js或者一些其他技术引入 模板&#xff1a;是用来渲染前端页面&#xff0c;在后端的api接口开发中并不会常用到模板&#xff0c;但是后台管理页面却会使用MVC模式开发&#xf…

Camera API2使用流程分析

1.首先看下framework层CameraService服务初始化流程分析 <1>. main_cameraserver.cpp的路径 /frameworks/av/camera/cameraserver/ CameraService::instantiate&#xff08;&#xff09;实际调用的是BinderService中的函数&#xff0c;因为CameraService是继承BinderSer…

[附源码]计算机毕业设计JAVA疫情状况下生活物资集体团购系统

[附源码]计算机毕业设计JAVA疫情状况下生活物资集体团购系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a…

学习ITIL4又给数字人带来哪些优势

2019新的ITIL 指南将被称为ITIL 4。这个名称反映了ITIL 4 在支持个人和组织应对第四次工业革命方面的作用。 IT 是当今世界每个企业的核心。该更新将使ITIL 能够反映我们所处的快节奏和复杂的环境&#xff0c;以及新的工作方式和新兴实践&#xff0c;所有这些都不仅对于ITSM 专…