thrift和java交互案例和结果

简介: 代码结构: 1>>>>>>  demoHello.thrift: namespace java xdg.luozhonghua.thrift.service /*  struct UserProfile { 1: i32 uid = 1, 2: string name = "User1", 3: string blurb, 4

代码结构:




1>>>>>>  demoHello.thrift:


namespace java xdg.luozhonghua.thrift.service



/*
 struct UserProfile {
 1: i32 uid = 1,
 2: string name = "User1",
 3: string blurb,
 4: list<i32> subNodeList,
      5: map<i32,string> subNodeMap,
      6: set<i32> subNodeSet
  }


service  HelloWorldService {
  UserStruct addUser(1: UserStruct userStruct)
  UserStruct getUser(1: i32 userId)
  list<UserStruct> findAllUser()
  list<UserStruct> findUser(1: map<string,string> parameterMap)
  string sayHello(1:string username)
  string getAge(1:i32 agr)
  set<i32> subNodeSet1(1: UserStruct userStruct)
  map<i32,string> subNodeMap1(1: UserStruct userStruct)
  list<i32> subNodeList1(1: UserStruct userStruct)
}
*/


struct Blog {
 1:string topic
 2:binary content
 3:i64 createTime
 4:string id
 5:string ipAddress
 6:map<string,string> props
}


service HelloWorldService {
    string sayHello(1:string username)
    
i32 testCase1(1:i32 num1, 2:i32 num2,3:string num3)


list<string> testCase2(1:map<string,string> num1)


void testCase3()


void testCase4(1:list<Blog> blog)

}




2>>>>>> 生成文件:

Blog.java

HelloWorldService.java




3>>>>>> HelloWorldImpl .java:

package xdg.luozhonghua.thrift.demo;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.thrift.TException;


import xdg.luozhonghua.thrift.service.Blog;
import xdg.luozhonghua.thrift.service.HelloWorldService.Iface;



public class HelloWorldImpl  implements   Iface{


public String sayHello(String username) throws TException {
// TODO Auto-generated method stub
 return "Hi," + username + " welcome to my blog blog.csdn.net/luozhonghua2014";
}


@Override
public int testCase1(int num1, int num2, String num3) throws TException {
// TODO Auto-generated method stub
return num1+num2;
}


@Override
public List<String> testCase2(Map<String, String> num1) throws TException {
//System.out.print("testCase2");
List<String> list=new ArrayList<String>();
for(String str:num1.keySet()){
list.add(str);
}

return list;
}


@Override
public void testCase3() throws TException {
// TODO Auto-generated method stub
System.out.print("testCase3");
}


@Override
public void testCase4(List<Blog> blog) throws TException {



System.out.print("testCase4   "+blog.size());

}

}


4>>>>>> HelloServerDemo.java

package xdg.luozhonghua.thrift.test;


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 xdg.luozhonghua.thrift.demo.HelloWorldImpl;
import xdg.luozhonghua.thrift.service.HelloWorldService;


public class HelloServerDemo {
public static final int SERVER_PORT = 8090;


public void startServer() {
try {
System.out.println("HelloWorld TSimpleServer start ....");


TProcessor tprocessor = new HelloWorldService.Processor(new HelloWorldImpl());

// HelloWorldService.Processor&lt;HelloWorldService.Iface&gt;
// tprocessor =
// new HelloWorldService.Processor&lt;HelloWorldService.Iface&gt;(
// new HelloWorldImpl());


// 简单的单线程服务模型,一般用于测试
TServerSocket serverTransport = new TServerSocket(SERVER_PORT);
TServer.Args tArgs = new TServer.Args(serverTransport);
tArgs.processor(tprocessor);
tArgs.protocolFactory(new TBinaryProtocol.Factory());
// tArgs.protocolFactory(new TCompactProtocol.Factory());
// tArgs.protocolFactory(new TJSONProtocol.Factory());
TServer server = new TSimpleServer(tArgs);
server.serve();


} catch (Exception e) {
System.out.println("Server start error!!!");
e.printStackTrace();
}
}


/**
* @param args
*/
public static void main(String[] args) {
HelloServerDemo server = new HelloServerDemo();
server.startServer();
}
}



5>>>>>> HelloClientDemo.java

package xdg.luozhonghua.thrift.test;


import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


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 xdg.luozhonghua.thrift.service.Blog;
import xdg.luozhonghua.thrift.service.HelloWorldService;


public class HelloClientDemo {
public static final String SERVER_IP = "localhost";
public static final int SERVER_PORT = 8090;
public static final int TIMEOUT = 30000;
 
/**
*
* @param userName
*/
public void startClient(String userName) {
TTransport transport = null;
try {
transport = new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT);
// 协议要和服务端一致
TProtocol protocol = new TBinaryProtocol(transport);
// TProtocol protocol = new TCompactProtocol(transport);
// TProtocol protocol = new TJSONProtocol(transport);
HelloWorldService.Client client = new HelloWorldService.Client(
protocol);
transport.open();
String result = client.sayHello(userName);
int t=client.testCase1(1, 2, "aaaa");
Map<String,String> map=new HashMap<String,String>();
map.put("aaa", "1111");
map.put("bbb", "2222");

 
List<Blog> list=new ArrayList<Blog>();
for(int i=0;i<5;i++){
Blog b=new Blog();
b.setId(i+"");
b.setTopic("afdaf"+i);
b.setCreateTime(new Date().getTime());
list.add(b);
}
client.testCase4(list);

System.out.println(t+"\t\n  Thrify client result =: " + result);
System.out.println(client.testCase2(map));
} catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
} finally {
if (null != transport) {
transport.close();
}
}
}
 
/**
* @param args
*/
public static void main(String[] args) {
HelloClientDemo client = new HelloClientDemo();
client.startClient("嘻嘻嘻");
 
}
}




运行结果:

server:

HelloWorld TSimpleServer start ....
testCase4   5



client:

3
  Thrify client result =: Hi,嘻嘻嘻 welcome to my blog blog.csdn.net/luozhonghua2014
[bbb, aaa]


目录
相关文章
|
4小时前
|
存储 Java
java用base64编码案例
Java Base64编码示例:导入`java.util.Base64`,设置字符串`originalString`,使用`Base64.getEncoder().encodeToString()`编码并存储到`encodedString`,打印编码后字符串。解码用`Base64.getDecoder().decode()`。
20 0
|
4小时前
|
安全 Java API
精通 Java 后台开发:案例分析与实践
【4月更文挑战第5天】本文旨在帮助读者掌握 Java 后台开发,通过电子商务系统案例探讨数据库设计、RESTful API、安全性和性能优化。使用 Spring 框架简化开发,Spring Security 保障安全,缓存技术提升性能。实践部分强调版本控制、单元测试、CI/CD 和代码规范的重要性,助力开发者提升技能,应对挑战。
|
4小时前
|
设计模式 消息中间件 安全
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
11 0
|
4小时前
|
Java 关系型数据库 测试技术
Java代码一键生成数据库文档(案例详解)
Screw是一个自动化数据库文档生成工具,能根据数据库表结构快速生成简洁、多格式(HTML、Word、Markdown)的文档,支持MySQL、MariaDB等多数据库。它使用Freemarker模板,允许用户自定义样式。依赖包括HikariCP数据库连接池和对应JDBC驱动。通过在Java代码或Maven插件中配置,可方便生成文档。示例代码展示了如何在测试用例中使用Screw。文档效果依赖于数据库中的表和字段注释。
|
5小时前
|
Java
【专栏】Java 8 的 Streams 提供了一种处理数据集合的新方式,增强了代码的可读性和可维护性
【4月更文挑战第28天】Java 8 的 Streams 提供了一种处理数据集合的新方式,增强了代码的可读性和可维护性。本文介绍了 Streams 的基本概念,如从数据源创建 Stream,以及中间和终端操作。通过过滤、映射、归并、排序、分组等案例,展示了 Streams 的使用,包括并行 Streams 提高效率。学习 Streams 可以提升代码质量和效率,文章鼓励读者在实际开发中探索更多 Streams 功能。
|
4小时前
|
Java Apache
java读取excel数据案例
Java代码示例使用Apache POI库读取Excel(example.xlsx)数据。创建FileInputStream和XSSFWorkbook对象,获取Sheet,遍历行和列,根据单元格类型(STRING, NUMERIC, BOOLEAN)打印值。需引入Apache POI库并确保替换文件路径。
11 1
|
4小时前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
|
4小时前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
34 0
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
4小时前
|
消息中间件 运维 Java
B/S架构,采用JAVA编程的医院云HIS系统源码,公立二甲医院应用案例
SaaS模式Java版云HIS系统,在公立二甲医院应用多年,经过多年持续优化系统运行稳定、功能齐全,界面布局合理、操作简便。融合B/S版电子病历系统,支持电子病历四级,HIS与电子病历系统均拥有自主知识产权。 云HIS系统采用云端SaaS服务的方式提供,使用用户通过浏览器即能访问,无需关注系统的部署、维护、升级等问题,系统充分考虑了模板化、配置化、智能化、扩展化等设计方法,覆盖了基层医疗机构的主要工作流程,能够与监管系统有序对接,并能满足未来系统扩展的需要。
B/S架构,采用JAVA编程的医院云HIS系统源码,公立二甲医院应用案例
|
5小时前
|
JSON 前端开发 Java
JWT解密:探秘令牌魔法与Java的完美交互
JWT解密:探秘令牌魔法与Java的完美交互
27 0
JWT解密:探秘令牌魔法与Java的完美交互