返回介绍

Stub层 - 类AbstractStub

发布于 2020-09-14 13:14:41 字数 3741 浏览 1307 评论 0 收藏 0

类AbstractStub是stub实现的通用基类。

类AbstractStub也是生成代码中的stub类的通用基类。这个类容许重定义,例如,添加拦截器到stub。

类定义

  1. package io.grpc.stub;
  2. public abstract class AbstractStub<S extends AbstractStub<S>> {
  3. }

属性和构造函数

类AbstractStub有两个属性:

  1. Channel channel
  2. CallOptions callOptions
  1. private final Channel channel;
  2. private final CallOptions callOptions;
  3. protected AbstractStub(Channel channel) {
  4. this(channel, CallOptions.DEFAULT);
  5. }
  6. protected AbstractStub(Channel channel, CallOptions callOptions) {
  7. this.channel = channel;
  8. this.callOptions = callOptions;
  9. }

注: 类CallOptions 的内容见 这里

方法

build()抽象方法

定义了抽象方法build()方法来返回一个新的stub,使用给定的Channel和提供的方法配置。

  1. protected abstract S build(Channel channel, CallOptions callOptions);
  • channel: 返回的新的stub将使用这个Channel来做通讯。
  • callOptions: 运行时调用选项,将被应用于这个stub的每次调用。(也就是说这个不可变的callOptions实例之后将在每次调用中重用)

with方法族

定义有多个with×××()方法,通过创建新的 CallOptions 实例,然后调用上面的build()方法来返回一个新的stub:

  1. public final S withDeadlineNanoTime(@Nullable Long deadlineNanoTime) {
  2. return build(channel, callOptions.withDeadlineNanoTime(deadlineNanoTime));
  3. }
  4. public final S withDeadlineAfter(long duration, TimeUnit unit) {
  5. return build(channel, callOptions.withDeadlineAfter(duration, unit));
  6. }
  7. @ExperimentalApi
  8. public final S withCompression(String compressorName) {
  9. return build(channel, callOptions.withCompression(compressorName));
  10. }

也可以替换使用新的Channel,或者在原有的Channel上添加拦截器:

  1. public final S withChannel(Channel newChannel) {
  2. return build(newChannel, callOptions);
  3. }
  4. public final S withInterceptors(ClientInterceptor... interceptors) {
  5. return build(ClientInterceptors.intercept(channel, interceptors), callOptions);
  6. }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文