- gPRC 介绍
- gPRC 介绍 - 资料收集整理
- gPRC 介绍 - Protocol Buffer 3
- gPRC文档
- gPRC文档 - gRPC官方文档(中文版)
- gPRC文档 - gRPC动机和设计原则
- gPRC文档 - 源码导航
- 基础 - NameResolver
- NameResolver - URI术语
- NameResolver - 类NameResolver
- NameResolver - 类DnsNameResolver
- NameResolver - 类DirectAddressNameResolver
- NameResolver - NameResolver的用法
- 基础 - Metadata
- Channel层
- Channel设计与代码实现 - 类Channel
- Channel设计与代码实现 - 类ManagedChannel
- 类ManagedChannelImpl - 空闲模式
- 类ManagedChannelImpl - InUseStateAggregator
- 类ManagedChannelImpl - Name Resolver
- 类ManagedChannelImpl - Load Balancer
- 类ManagedChannelImpl - Transport
- 类ManagedChannelImpl - Executor
- 类ManagedChannelImpl - 关闭
- Channel层 - Channel Builder设计与代码实现
- Channel Builder设计与代码实现 - 类ManagedChannelBuilder
- Channel Builder设计与代码实现 - 类AbstractManagedChannelImplBuilder
- Channel Builder设计与代码实现 - 类NettyChannelBuilder
- Channel层 - Channel Provider设计与代码实现
- Channel Provider设计与代码实现 - 类ManagedChannelProvider
- Channel Provider设计与代码实现 - 类NettyChannelProvider
- Channel层 - 类CallOptions
- Stub层 - 类DemoServiceBlockingStub
- Stub层 - 类AbstractStub
- 客户端流程
- 状态 - 类Status
- 状态 - 状态码详细定义
- 状态 - 类StatusException
- 状态 - 异常处理的流程分析
- 实践 - 集成Spring Boot
- 实践 - 文档生成
- 文档生成 - 支持proto3
- 文档生成 - build插件
- 文档生成 - 使用模板定制输出
- 实践 - 代理
- 实践 - 超时
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
Stub层 - 类DemoServiceBlockingStub
类定义
这个类是通过grpc的proto编译器生成的类,它的package由.proto文件中的 java_package 选项指定,如:
option java_package = “io.grpc.examples.demo”;
类定义如下,继承AbstractStub,并实现DemoServiceBlockingClient接口:
package io.grpc.examples.demo;
@javax.annotation.Generated("by gRPC proto compiler")
public static class DemoServiceBlockingStub extends io.grpc.stub.AbstractStub<DemoServiceBlockingStub>
implements DemoServiceBlockingClient {
}
构造函数
构造函数非常简单,直接调用基类 AbstractStub 的构造函数,传入Channel和CallOptions:
private DemoServiceBlockingStub(io.grpc.Channel channel) {
super(channel);
}
private DemoServiceBlockingStub(io.grpc.Channel channel,
io.grpc.CallOptions callOptions) {
super(channel, callOptions);
}
}
方法
首先实现了基类 AbstractStub 的抽象方法build(),只是简单的构造了自身的一个新的实例:
@java.lang.Override
protected DemoServiceBlockingStub build(io.grpc.Channel channel,
io.grpc.CallOptions callOptions) {
return new DemoServiceBlockingStub(channel, callOptions);
}
业务方法实现
然后就是实现业务定义的service方法了,这里是定义在 DemoServiceBlockingClient 接口中。先看 DemoServiceBlockingClient 接口的定义:
public static interface DemoServiceBlockingClient {
public io.grpc.examples.demo.LoginResponse login(io.grpc.examples.demo.LoginRequest request);
......
}
这些方法对应于.proto文件中service定义的rpc方法:
service DemoService {
rpc login (LoginRequest) returns (LoginResponse) {}
......
}
DemoServiceBlockingStub 中一一实现这些服务方法:
@java.lang.Override
public io.grpc.examples.demo.LoginResponse login(io.grpc.examples.demo.LoginRequest request) {
return blockingUnaryCall(getChannel(), METHOD_LOGIN, getCallOptions(), request);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论