《Netty学习打卡--从小白到放弃》----- 16 - netty 之grpc Server Streaming Rpc 例子

打卡日期(2019-07-18)

学习要点

-   利用grpc完成Server Streaming Rpc例子
步骤
2.编写proto文件
syntax = "proto3";


package study;

option java_package = "com.dragon.study";
option java_outer_classname = "Student";
option optimize_for = SPEED;
option java_multiple_files = true;

message UserRequest{
    int32 age = 1;
}

message UserResponse{
    string username = 1;
    int32 age = 2;
    string city = 3;
}


service StudentService{
    rpc GetStudentsByAge(UserRequest) returns(stream UserResponse){}
}

3.利用gradle generateProto生成java类
运行命令:
gradle generateProto
4.编写Server/Client服务
Server

Server端跟上一章一样
《Netty学习打卡–从小白到放弃》----- 15 - netty 之grpc Simple RPC例子

package com.dragon.study.server;

import com.dragon.study.*;
import io.grpc.stub.StreamObserver;

import java.util.ArrayList;
import java.util.List;

public class StudentServiceImpl extends StudentServiceGrpc.StudentServiceImplBase {

    @Override
    public void getStudentsByAge(UserRequest request, StreamObserver<UserResponse> responseObserver) {
        System.out.println("getStudentsByAge() 接收到客户端请求的参数 , age = " + request.getAge());
        responseObserver.onNext(UserResponse.newBuilder().setAge(15).setUsername("张三").setCity("北京").build());
        responseObserver.onNext(UserResponse.newBuilder().setAge(20).setUsername("李四").setCity("上海").build());
        responseObserver.onNext(UserResponse.newBuilder().setAge(25).setUsername("王五").setCity("天津").build());
        responseObserver.onNext(UserResponse.newBuilder().setAge(30).setUsername("赵六").setCity("深圳").build());
        responseObserver.onNext(UserResponse.newBuilder().setAge(35).setUsername("七爷").setCity("广州").build());
        responseObserver.onCompleted();
    }

}
Client
package com.dragon.study.client;

import com.dragon.study.StudentRequest;
import com.dragon.study.StudentResponse;
import com.dragon.study.StudentServiceGrpc;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;

import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;

public class StudentClient {
    private static final Logger logger = Logger.getLogger(StudentClient.class.getName());

    //channel相当于一个连接,客户端核心类
    private final ManagedChannel channel;
    private final StudentServiceGrpc.StudentServiceBlockingStub blockingStub;

    public StudentClient(String host , int port){
        //ManagedChannelBuilder 管理客户端的链接,用来创建链接
        this(ManagedChannelBuilder.forAddress(host,port).usePlaintext().build());
    }

    public StudentClient(ManagedChannel channel) {
        this.channel = channel;
        blockingStub = StudentServiceGrpc.newBlockingStub(channel);
    }

    public void shutdown() throws InterruptedException {
        channel.shutdown().awaitTermination(100,TimeUnit.SECONDS);
    }
    public void getUsers(int age){

        Iterator<UserResponse> Iterator = blockingStub.getStudentsByAge(UserRequest.newBuilder().setAge(10).build());
        while (Iterator.hasNext()){
            UserResponse response = Iterator.next();
            System.out.println(response.getUsername() + "," + response.getAge() + "," + response.getCity());
        }
    }
    public static void main(String[] args) throws InterruptedException {
        StudentClient client = new StudentClient("localhost",8080);
        try{
           client.getUsers(1)
        }finally {
            client.shutdown();
        }


    }

}

分别启动Server 和 Client端
运行结果:
张三,15,北京
李四,20,上海
王五,25,天津
赵六,30,深圳
七爷,35,广州
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值