thrift java示例
thrift java示例
使用IntelliJ IDEA作为开发工具;
增加proto文件夹,里面写上sayHello.proto
syntax = "proto3"; option java_multiple_files = true;
option java_package = "grpc.example";
option java_outer_classname = "HelloProto";
option objc_class_prefix = "HLW"; package service; service HelloService{
rpc SayHello (HelloRequest) returns (HelloResponse){}
} message HelloRequest{
string name = 1;
} message HelloResponse{
string message = 1;
}
pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.stono</groupId>
<artifactId>grpc-2</artifactId>
<version>1.0-SNAPSHOT</version> <properties>
<os.detection.classifierWithLikes>debian,rhel</os.detection.classifierWithLikes>
</properties> <dependencies>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies> <build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.4.1.Final</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.5.0</version>
<configuration>
<protocArtifact>com.google.protobuf:protoc:3.0.0:exe:${os.detected.classifier}}</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>os.grpc:protoc-gen-grpc-java:1.0.0:exe:${os.detected.classifier}}</pluginArtifact>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
在Maven Projects中,进行protobuf:compile,protobuf:compile-custom;
生成grpc-java和java源文件;
然后编写客户端、服务端程序:
package com.grpc; import grpc.example.HelloRequest;
import grpc.example.HelloResponse;
import io.grpc.Server;
import io.grpc.ServerBuilder;
import grpc.example.HelloSerivceGrpc;
import io.grpc.stub.StreamObserver; import java.io.IOException; public class HelloServer {
private int port = 50051;
private Server server;
private void start() throws IOException{
server = ServerBuilder.forPort(port)
.addService(new HelloServiceImpl())
.build()
.start();
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run(){
HelloServer.this.stop();
}
});
}
private void stop(){
if(server!=null){
server.shutdown();
}
}
private void blockUntilShutdown() throws InterruptedException{
if(server != null){
server.awaitTermination();
}
}
private class HelloServiceImpl extends HelloSerivceGrpc.HelloSerivceImplBase{
public void sayHello(HelloRequest req, StreamObserver<HelloResponse> responseObserver){
HelloResponse reply = HelloResponse.newBuilder().setMessage("Hello, "+req.getName()).build();
responseObserver.onNext(reply);
responseObserver.onCompleted();
}
} public static void main(String[] args) throws Exception {
final HelloServer server = new HelloServer();
server.start();
server.blockUntilShutdown();
}
}
package com.grpc; import grpc.example.HelloRequest;
import grpc.example.HelloResponse;
import io.grpc.ManagedChannel;
import grpc.example.HelloSerivceGrpc;
import io.grpc.ManagedChannelBuilder; import java.util.concurrent.TimeUnit; public class HelloClient {
private final ManagedChannel channel;
private final HelloSerivceGrpc.HelloSerivceBlockingStub blockingStub;
public HelloClient(String host,int port){
channel = ManagedChannelBuilder.forAddress(host,port)
.usePlaintext(true)
.build();
blockingStub = HelloSerivceGrpc.newBlockingStub(channel);
}
public void shutdown() throws InterruptedException{
channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
}
public String sayHello(String name){
HelloRequest request = HelloRequest.newBuilder().setName(name).build();
HelloResponse response = blockingStub.sayHello(request);
return response.getMessage();
} public static void main(String[] args) throws Exception {
HelloClient client = new HelloClient("127.0.0.1",50051);
String content = client.sayHello("stono");
System.out.println(content);
client.shutdown();
}
}
注意把生成的代码文件夹作为source folder;
然后就可以运行了;
thrift java示例的更多相关文章
- Python Thrift 简单示例
本文基于Thrift-0.10,使用Python实现服务器端,使用Java实现客户端,演示了Thrift RPC调用示例.Java客户端提供两个字符串参数,Python服务器端计算这两个字符串的相似度 ...
- 课程作业01:模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数字,求和之后输出结果。
1.设计思想: 首先是从JavaAppArguments.java示例开始,此示例已打印参数,定义数字 之和和作为存储单位的整型,然后将输入参数的字符串转化为整型,之后求和即可. 2.程序流程图: 3 ...
- 左右JAVA示例代码事件分发和监督机制来实现-绝对原创有用
文章标题:左右JAVA示例代码事件分发和监督机制来实现 文章地址: http://blog.csdn.net/5iasp/article/details/37054171 作者: javaboy201 ...
- Spark 用户自定义函数 Java 示例
Spark UDF Java 示例 在这篇文章中提到了用Spark做用户昵称文本聚类分析,聚类需要选定K个中心点,然后迭代计算其他样本点到中心点的距离.由于中文文字分词之后(n-gram)再加上昵称允 ...
- & 和 && 的区别,与(&)运算符、位移运算符(<< 、>>、>>>)的含义及使用(Java示例)
& 和 && 的区别,与(&)运算符.位移运算符(<< .>>.>>>)的含义及使用(Java示例) 1. & 和 & ...
- HTTP基本认证(Basic Authentication)的JAVA示例
大家在登录网站的时候,大部分时候是通过一个表单提交登录信息.但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用HTTP基本认证.下面来看看一看这个认证的工作过程:第一步: 客户端发送ht ...
- CentOS安装卸载memcache及JAVA示例
原文地址:http://www.cnblogs.com/zhongshengzhen/ 先安装libevent,memcached依赖libevent的lib [root@VM_64_81_c ...
- hbase 0.96 java 示例
import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; impo ...
- epub、ocf等常用电子书格式浅析----附JAVA示例程序
一. 电子书介绍 转载请注明http://www.cnblogs.com/xckk/p/6020324.html Epub(Electronic Publication)是一个完全开放和免费的电子书标 ...
随机推荐
- 写一个类似淘宝的ios app需要用到哪些技术?
写一个类似淘宝的ios app需要用到哪些技术? 让我想起了有人私信我,说不缺钱,做个类似知乎的东西,包括加运营,需要多少钱. 扯淡结束,正好最近看了一点这方面的东西,也许对题主来说有点帮助. 手机淘 ...
- 最全三大框架整合(使用映射)——applicationContext.xml里面的配置
applicationContext.xml: <?xml version="1.0" encoding="UTF-8"?> <beans x ...
- etcd创建集群并增加节点
下载安装 从这下载https://github.com/coreos/etcd/releases/download/v3.3.2/etcd-v3.3.2-linux-amd64.tar.gz tar ...
- [Javascript] HTML5 地理位置定位(HTML5 Geolocation)原理及应用
地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基于位置信息的应用.今天这篇文章向大家介绍一下 HTML5 地理位置定位的基本原理及各个 ...
- php obstart
PHP ob_start() 函数介绍 2010-03-29 php ob_start 与 ob_end_flush() 是 php 的缓冲输出函数. ob_start([string output_ ...
- shp系列(七)——利用C++进行Shx文件的写(创建)
之前介绍了Shp文件和Dbf的写(创建),最后来介绍一下Shx文件的写(创建).Shx文件是三者之中最简单的一个,原因有两个:第一是Shx文件的头文件与Shp文件的头文件几乎一样(除了FileLeng ...
- 如何用jquery+ajax写省市区的三级联动?(封装和不封装两种方式)-----2017-05-14
首先,要实现如下图效果, 1.要理清思路: 先做出三个下拉菜单----根据第一个下拉菜单的value值获取第二个下拉列表的内容,第三个同理. 2.用到的数据库表:Chinastates表 规律:根据国 ...
- Android 关于Toolbar和FragmentActivity的问题
今天在工作中遇到用Fragment搭Tab框架时,FragmentActivity无法使用Toolbar的问题.查了许多资料,其实AppComponent继承自FragmentActivity,所以A ...
- [ Database ] [ SQL Server ] SQL Server 很多不允許的操作解決方法
說明可參考 https://blog.miniasp.com/post/2012/10/26/SQL-Server-Management-Studio-Prevent-saving-changes-t ...
- The AJAX response: XML, HTML, or JSON?
shared from: http://www.quirksmode.org/blog/archives/2005/12/the_ajax_respon.html 1. 返回XML文档 对返回的XML ...