`

grpc java helloworld简单demo开发

阅读更多

  最近google发布了grpc1.0,数据交互使用了protocol buffer,相比之前使用的hession和json序列化方式性能应该提升不少,所有先搞一个grpc的hello world跑一下,项目使用maven搭建,并使用Eclipse开发。

一.使用Eclipse创建maven项目,添加pom配置

1.添加grpc1.0 maven依赖

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <grpc.version>1.4.0</grpc.version><!-- CURRENT_GRPC_VERSION -->  
</properties>

<dependencies>
	<dependency>  
		<groupId>io.grpc</groupId>  
		<artifactId>grpc-netty</artifactId>  
		<version>${grpc.version}</version>  
	</dependency>  
	<dependency>  
		<groupId>io.grpc</groupId>  
		<artifactId>grpc-protobuf</artifactId>  
		<version>${grpc.version}</version>  
	</dependency>  
	<dependency>  
		<groupId>io.grpc</groupId>  
		<artifactId>grpc-stub</artifactId>  
		<version>${grpc.version}</version>  
	</dependency>  
	<dependency>  
		<groupId>io.grpc</groupId>  
		<artifactId>grpc-testing</artifactId>  
		<version>${grpc.version}</version>  
		<scope>test</scope>  
	</dependency>  
	<dependency>  
		<groupId>junit</groupId>  
		<artifactId>junit</artifactId>  
		<version>4.11</version>  
		<scope>test</scope>  
	</dependency>  
	<dependency>  
		<groupId>org.mockito</groupId>  
		<artifactId>mockito-core</artifactId>  
		<version>1.9.5</version>  
		<scope>test</scope>  
	</dependency>
</dependencies>

2.配置protobuf maven插件

        配置了protobuf 插件后,可以自动将.proto文件生成对应的java代码。

<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.3.0:exe:${os.detected.classifier}</protocArtifact>  
				<pluginId>grpc-java</pluginId>  
				<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>  
			</configuration>  
			<executions>  
				<execution>  
					<goals>  
						<goal>compile</goal>  
						<goal>compile-custom</goal>  
					</goals>  
				</execution>  
			</executions>  
		</plugin>  
	</plugins>  
</build>

  配置完,整个pom.xml文件内容如下:

<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.bijian</groupId>
  <artifactId>test-grpc</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>test-grpc</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <grpc.version>1.4.0</grpc.version><!-- CURRENT_GRPC_VERSION -->  
  </properties>

    <dependencies>
        <dependency>  
            <groupId>io.grpc</groupId>  
            <artifactId>grpc-netty</artifactId>  
            <version>${grpc.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>io.grpc</groupId>  
            <artifactId>grpc-protobuf</artifactId>  
            <version>${grpc.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>io.grpc</groupId>  
            <artifactId>grpc-stub</artifactId>  
            <version>${grpc.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>io.grpc</groupId>  
            <artifactId>grpc-testing</artifactId>  
            <version>${grpc.version}</version>  
            <scope>test</scope>  
        </dependency>  
        <dependency>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
            <version>4.11</version>  
            <scope>test</scope>  
        </dependency>  
        <dependency>  
            <groupId>org.mockito</groupId>  
            <artifactId>mockito-core</artifactId>  
            <version>1.9.5</version>  
            <scope>test</scope>  
        </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.3.0:exe:${os.detected.classifier}</protocArtifact>  
                    <pluginId>grpc-java</pluginId>  
                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>  
                </configuration>  
                <executions>  
                    <execution>  
                        <goals>  
                            <goal>compile</goal>  
                            <goal>compile-custom</goal>  
                        </goals>  
                    </execution>  
                </executions>  
            </plugin>  
        </plugins>  
	</build>
</project>

 

二.编写proto文件helloworld.proto

syntax = "proto3";

option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW";

package helloworld;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

        然后点击pom.xml右击->Run as->Maven install,将会在target/generatedo-sources下生成的对应的java代码,如下所示:


  将生成的代码拷贝到src/main/java下,如下所示(有几处@java.lang.Override的编译错误,去掉即可):


 

三.编写grpc 服务端HelloWorldServer.java

package com.bijian.test_grpc;

import io.grpc.Server;
import io.grpc.ServerBuilder;
import io.grpc.examples.helloworld.GreeterGrpc;
import io.grpc.examples.helloworld.HelloReply;
import io.grpc.examples.helloworld.HelloRequest;
import io.grpc.stub.StreamObserver;
import java.io.IOException;

public class HelloWorldServer {
	
    private int port = 50051;
    private Server server;

    private void start() throws IOException {
    	
        server = ServerBuilder.forPort(port)
                .addService(new GreeterImpl())
                .build()
                .start();

        System.out.println("service start...");

        Runtime.getRuntime().addShutdownHook(new Thread() {

            @Override
            public void run() {

                System.err.println("*** shutting down gRPC server since JVM is shutting down");
                HelloWorldServer.this.stop();
                System.err.println("*** server shut down");
            }
        });
    }

    private void stop() {
        if (server != null) {
            server.shutdown();
        }
    }

    // block 一直到退出程序 
    private void blockUntilShutdown() throws InterruptedException {
        if (server != null) {
            server.awaitTermination();
        }
    }

    public static void main(String[] args) throws IOException, InterruptedException {

        final HelloWorldServer server = new HelloWorldServer();
        server.start();
        server.blockUntilShutdown();
    }

    // 实现 定义一个实现服务接口的类 
    private class GreeterImpl extends GreeterGrpc.GreeterImplBase {
    	
        public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) {
            System.out.println("service:"+req.getName());
            HelloReply reply = HelloReply.newBuilder().setMessage(("Hello: " + req.getName())).build();
            responseObserver.onNext(reply);
            responseObserver.onCompleted();
        }
    }
}

 

四.编写grpc 客户端 HelloWorldClient.java

package com.bijian.test_grpc;

import io.grpc.ManagedChannel; 
import io.grpc.ManagedChannelBuilder;
import io.grpc.examples.helloworld.GreeterGrpc; 
import io.grpc.examples.helloworld.HelloReply; 
import io.grpc.examples.helloworld.HelloRequest;
import java.util.concurrent.TimeUnit; 

public class HelloWorldClient {

    private final ManagedChannel channel; 
    private final GreeterGrpc.GreeterBlockingStub blockingStub;

    public HelloWorldClient(String host,int port){ 
        channel = ManagedChannelBuilder.forAddress(host,port) 
                .usePlaintext(true) 
                .build();

        blockingStub = GreeterGrpc.newBlockingStub(channel); 
    }


    public void shutdown() throws InterruptedException { 
        channel.shutdown().awaitTermination(5, TimeUnit.SECONDS); 
    }

    public void greet(String name){ 
        HelloRequest request = HelloRequest.newBuilder().setName(name).build(); 
        HelloReply   response = blockingStub.sayHello(request);
        System.out.println(response.getMessage());

    }
    
    public static void main(String[] args) throws InterruptedException { 
        HelloWorldClient client = new HelloWorldClient("127.0.0.1",50051);
        for(int i=0;i<5;i++){
            client.greet("world:"+i);
        }
    } 
}

 

五.项目完整结构


 

六.项目运行结果

        服务端

service start...
service:world:0
service:world:1
service:world:2
service:world:3
service:world:4
三月 17, 2018 9:30:40 下午 io.grpc.netty.NettyServerTransport notifyTerminated

        客户端

Hello: world:0
Hello: world:1
Hello: world:2
Hello: world:3
Hello: world:4

  

参考文章:http://blog.csdn.net/whzhaochao/article/details/52421867

  • 大小: 15 KB
  • 大小: 11.6 KB
  • 大小: 9.2 KB
分享到:
评论

相关推荐

    grpc java版本demo

    在这个"grpc java版本demo"中,我们将探讨如何使用 Java 实现 GRPC 的客户端和服务器。 1. **Protocol Buffers (protobuf)**: protobuf 是一种轻量级的数据序列化协议,用于结构化数据的编码和解码。它支持多种编程...

    Maven搭建Grpc项目详细流程附加grpc—java简单demo

    在本文中,我们将详细介绍如何使用Maven来搭建一个gRPC Java项目,并提供一个简单的示例。gRPC是一个高性能、开源的通用RPC框架,它利用Protocol Buffers作为接口定义语言。Maven是Java项目管理和构建的工具,对于...

    grpc_helloworld.zip

    这个demo就是一个完整的vs项目,里面包含了所有依赖的grpc库,grpc库的编译方法以及grpc helloworld项目构建过程可以参考我的博文https://blog.csdn.net/weixin_28927079/article/details/97262243

    grpc_grpc_protobuf_grpcdemo_

    标题 "grpc_grpc_protobuf_grpcdemo_" 暗示我们正在探讨的是一个使用gRPC、Protocol Buffers(protobuf)以及一个名为 "grpcdemo" 的示例项目。在这个项目中,我们将深入理解如何利用gRPC和protobuf进行高效、跨平台...

    golang grpc helloworld demo

    本资源是golang编写的grpc的使用例子。包含一个客户端、一个服务端。先启动服务端开启端口,再启动客户端。之后在客户端页面可以输入字符串,服务端会接收字符串,并进行处理,处理完之后发送到客户端接收端口。...

    grpc-java源码环境构建.doc

    GRPC-Java 源码环境构建 GRPC-Java 源码环境构建是一个相对复杂的过程,需要具备一定的技术基础和经验。本文将详细介绍 GRPC-Java 源码环境构建的步骤和过程,旨在帮助读者快速搭建 GRPC-Java 源码环境。 一、...

    基于c++实现的GRPC服务端demo

    在本文中,我们将深入探讨如何使用 C++ 实现一个简单的 gRPC 服务端 demo。首先,我们需要了解 gRPC 的核心概念和工作原理。 1. **gRPC 基本概念** - **RPC**:远程过程调用,允许一个程序调用另一个位于不同地址...

    grpc-java-demo:本指南通过一个简单的示例使您开始使用Java中的gRPC。

    程序启动步骤1 启动服务端:运行 io/grpc/examples/helloworld/HelloWorldServer.java 的 main 方法2.启动客户端调用服务:运行:io/grpc/examples/helloworld/HelloWorldClient.java 的main 方法grpcThis guide ...

    C#使用gRPC的Demo

    在"C#使用gRPC的Demo"中,我们将会看到一个完整的C#应用实例,它包括客户端(gRPCDemo.Client)、服务端(gRPCDemo.Server)以及项目解决方案文件(gRPCDemo.sln)。此外,run_gRPCTool.bat文件用于运行必要的gRPC...

    grpc项目接口实例demo

    gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式...

    protoc-gen-grpc-java-1.40.0-osx-aarch_64.exe

    protoc-gen-grpc-java-1.40.0-osx-aarch_64 mac arm芯片平台grpc生成java的支持。官网上面没有,这是基于源码编译生成的。 pom.xml:(protoc-gen-grpc-java-1.40.0.pom) &lt;modelVersion&gt;4.0.0 &lt;groupId&gt;io.grpc ...

    protoc+protoc-gen-grpc-java

    总的来说,`protoc`和`protoc-gen-grpc-java`是gRPC Java开发中的关键工具,它们帮助开发者快速、高效地构建分布式系统,降低了跨语言通信的复杂性。通过使用这两者,你可以专注于业务逻辑,而不是底层网络通信的...

    grpc-java-1.9.0.tar.gz_gRPC-java_java Tcp _谷歌 RPC 框架

    gRPC-java 1.9.0 已发布,gRPC-java 是谷歌 RPC 框架 gRPC 的 Java 实现。gRPC 是一个高性能、开源、通用的 RPC 框架,面向移动和 HTTP/2 设计,是由谷歌发布的首款基于 Protocol Buffers 的 RPC 框架。 gRPC 基于 ...

    源码_GRPC_CPP_Demo.zip

    在这个“源码_GRPC_CPP_Demo.zip”压缩包中,我们找到了一个Windows下的GRPC C++示例程序,这对于理解和学习如何在Windows环境中使用GRPC和C++进行开发非常有帮助。 首先,让我们了解GRPC的基本概念。GRPC的核心是...

    grpc-java.rar

    这个"grpc-java.rar"文件很可能包含了GRPC在Java平台上的示例和演示项目,帮助开发者理解如何在Java环境中使用GRPC进行服务间通信。 GRPC的核心概念包括: 1. **Protocol Buffers (protobuf)**:这是Google的一种...

    GRPC简单应用(Java+Python)

    2. 定义.proto文件:创建一个名为`helloworld.proto`的文件,定义一个简单的"Greeter"服务,包含一个SayHello方法,接受一个HelloRequest并返回一个HelloReply。 ```proto syntax = "proto3"; package helloworld; ...

    grpc demo for client VS2015

    标签“grpc”、“vs2015”和“demo”进一步强调了这个项目的关键特征:它是关于gRPC技术的,使用的是VS2015开发工具,而且是一个演示性质的客户端示例。 在“压缩包子文件的文件名称列表”中提到的“GrpcTest”可能...

    gRPC与云原生应用开发:以Go和Java为例(图灵图书) by 卡山·因德拉西里 丹尼什·库鲁普 (z-lib.org)1

    《gRPC与云原生应用开发:以Go和Java为例》是卡山·因德拉西里和丹尼什·库鲁普合著的一本技术图书,深入探讨了gRPC这一高性能远程过程调用(RPC)框架在现代云原生应用开发中的应用。gRPC是一种跨语言、基于HTTP/2...

    grpc、zmq通信效率测试demo

    本篇文章将深入探讨这两个工具,并基于提供的“grpc、zmq通信效率测试demo”进行分析。 首先,`gRPC` 是由 Google 开源的一款高性能、开源和通用的 RPC (Remote Procedure Call) 框架,基于 HTTP/2 协议,支持多种...

Global site tag (gtag.js) - Google Analytics