记录备用。。
test.thrift
namespace java com.lxw.data.aggregation.test struct PhysicalDeviceModel{ 1:i32 id ; 2:string name; 3:string status; 4:string ip; 5:string pool; } service PhysicalDeviceServices { void addPhysicalDevice(1:PhysicalDeviceModel device), PhysicalDeviceModel getDeviceById(1:i32 id ) }
thrift --gen java test.thrift
编译生成PhysicalDeviceModel.java和PhysicalDeviceServices.java
实现PhysicalDeviceServices:
package com.lxw.data.aggregation.test; import java.util.HashMap; import java.util.Map; import org.apache.thrift.TException; public class PhysicalDeviceServicesImpl implements PhysicalDeviceServices.Iface { private Map<String,PhysicalDeviceModel> devices = new HashMap<String,PhysicalDeviceModel>(); public PhysicalDeviceServicesImpl() { PhysicalDeviceModel p1 = new PhysicalDeviceModel(1,"p1","running","10.10.10.1","pool1"); PhysicalDeviceModel p2 = new PhysicalDeviceModel(2,"p2","running","10.10.10.2","pool1"); PhysicalDeviceModel p3 = new PhysicalDeviceModel(3,"p3","shutdown","10.10.10.3","pool2"); PhysicalDeviceModel p4 = new PhysicalDeviceModel(4,"p4","shutdown","10.10.10.4","pool2"); devices.put(p1.getId() + "", p1); devices.put(p2.getId() + "", p2); devices.put(p3.getId() + "", p3); devices.put(p4.getId() + "", p4); } @Override public void addPhysicalDevice(PhysicalDeviceModel device) throws TException { String k = device.getId() + ""; devices.put(k, device); } @Override public PhysicalDeviceModel getDeviceById(int id) throws TException { return devices.get(id + ""); } }
RCPServer.java
package com.lxw.data.aggregation.test; import java.net.InetSocketAddress; 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.TServerTransport; import org.apache.thrift.transport.TTransportException; import com.lxw.data.aggregation.test.PhysicalDeviceServices.Iface; public class RPCServer { public static void main(String[] args) { PhysicalDeviceServices.Processor<Iface> processor = new PhysicalDeviceServices.Processor<PhysicalDeviceServices.Iface>(new PhysicalDeviceServicesImpl()); try { TServerTransport serverTransport = new TServerSocket( new InetSocketAddress("localhost",9813)); TServer.Args tArgs = new TServer.Args(serverTransport); tArgs.processor(processor); tArgs.protocolFactory(new TBinaryProtocol.Factory()); TServer server = new TSimpleServer(tArgs); server.serve(); } catch (TTransportException e) { e.printStackTrace(); } } }
ThriftClient.java
package com.lxw.data.aggregation.test; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; public class ThriftClient { public static void main(String[] args) throws Exception { TTransport transport = new TSocket("localhost", 9813); TProtocol protocol = new TBinaryProtocol(transport); PhysicalDeviceServices.Client client = new PhysicalDeviceServices.Client(protocol); transport.open(); PhysicalDeviceModel p1 = client.getDeviceById(1); System.out.println(p1.getId() + ":" + p1.getName()); System.out.println(p1); PhysicalDeviceModel p2 = new PhysicalDeviceModel(1,"p1","ddddddd","10.10.10.1","pool1"); client.addPhysicalDevice(p2); p1 = client.getDeviceById(1); System.out.println(p1.getId() + ":" + p1.getName()); System.out.println(p1); } }
相关推荐
在"thrift example"中,我们可以看到几个关键概念和技术: 1. **Thrift Server**:Thrift服务器是实现业务逻辑的地方,它使用Thrift编译器生成的代码来处理客户端请求。服务器可以基于多种协议和传输方式运行,例如...
namespace java com.example.myservice service MyService { string echo(1: string message) } struct Message { 1: required string content } ``` 3. **生成 Java 代码** 使用已安装的 Thrift 编译器,将 `...
2. **生成的 Java 代码**:运行 `thrift -gen java example.thrift` 后,会生成如下的 Java 类: - `ExampleService.java`:服务接口类,包含了服务定义的方法。 - `ExampleService$Iface.java` 和 `...
2. **代码生成**:通过Thrift编译器,我们可以将`.thrift`文件转换为特定编程语言的代码,例如Java、Python或C++。这些生成的代码包括服务接口的抽象类、数据结构的类以及客户端和服务端的通信协议实现。 3. **...
namespace java com.example.myapp service MyService { string sayHello(1:string name) } ``` 在这个例子中,我们定义了一个名为"MyService"的服务,它有一个方法"sayHello",接受一个字符串参数"name"并返回一...
1. **跨语言性**:Thrift支持众多编程语言,如C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk等,使得服务的开发和调用可以在不同的语言环境中进行。 2. **高性能**:Thrift通过高效...
在这个例子中,`namespace java com.example.myproject`指定了在生成Java代码时,所有类应该放在`com.example.myproject`包下。`User`结构体和`UserService`会被放在对应的类文件中。 压缩包内的“CSS_namespace_...
2. **生成 Thrift 代码**:使用 Thrift 编译器将 IDL 文件转换为不同目标语言(如 Java)的代码。这会生成服务接口、数据结构类以及客户端和服务端的处理程序接口。在给定的文件列表中,可能已经包含了这些生成的...
结合这些组件,"thrift-typescript-servlet-example"示例展示了如何在TypeScript客户端调用Java Servlet服务器上的Thrift服务。以下是这个项目可能的工作流程: 1. **服务定义**:使用Thrift的IDL定义服务接口和...
4. **示例和测试**:`example`目录下通常会有各种语言的示例代码,帮助开发者快速理解和学习Thrift的使用。`test`目录则包含了对Thrift的各种单元测试,确保其功能的正确性。 5. **文档**:`docs`目录可能包含了...
3. `example`:示例程序,用于演示如何使用Thrift构建服务和客户端。 4. `docs`:文档资料,帮助开发者理解和使用Thrift。 5. `bin`:编译后的工具,如thrift编译器的可执行文件。 6. `LICENSE`和`NOTICE`:关于...
Thrift是一种跨语言的服务开发框架,由Facebook开源,旨在提供高效、轻量级的结构化数据串行化机制,支持多种编程语言,如C++, Java, Python等。它通过IDL来定义服务接口和数据类型,然后自动生成相应的客户端和...
namespace java com.example.myapp service MyService { i32 doSomething(1: MyRequest request) } struct MyRequest { 1: required string param1 2: optional i32 param2 } ``` 在这个例子中,`MyService`...
在Java中,RPC框架有很多种,如Hessian、gRPC、Dubbo、Thrift等。本实例将主要介绍基于XML-RPC的Java客户端实现。 XML-RPC是一种简单的基于HTTP协议的远程过程调用协议,它使用XML作为数据交换格式。在Java中,...
Finagle是Twitter开发的一个分布式服务框架,它允许开发者用Scala、Java或Finagle原生的Thrift语言来构建高并发、低延迟、容错性良好的网络服务。这个压缩包可能包含了Finagle在实际应用中的代码示例,帮助开发者...
public class DeadlockExample { public static void main(String[] args) { final Object resourceA = new Object(); final Object resourceB = new Object(); Thread thread1 = new Thread(() -> { ...
example provider Map<String> processorMap = ImmutableMap .<String> of( "blackService", new BlackService.Processor( new BlackServiceImpl()), "userService", new ...