io.netty.util.concurrent.Future.addListener()方法的使用及代码示例

x33g5p2x  于2022-01-19 转载在 其他  
字(10.8k)|赞(0)|评价(0)|浏览(138)

本文整理了Java中io.netty.util.concurrent.Future.addListener()方法的一些代码示例,展示了Future.addListener()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Future.addListener()方法的具体详情如下:
包路径:io.netty.util.concurrent.Future
类名称:Future
方法名:addListener

Future.addListener介绍

[英]Adds the specified listener to this future. The specified listener is notified when this future is #isDone(). If this future is already completed, the specified listener is notified immediately.
[中]将指定的侦听器添加到此未来。当未来为#isDone()时,将通知指定的侦听器。如果此未来已完成,则会立即通知指定的侦听器。

代码示例

代码示例来源:origin: netty/netty

/**
 * Adds a new future to be combined. New futures may be added until an aggregate promise is added via the
 * {@link PromiseCombiner#finish(Promise)} method.
 *
 * @param future the future to add to this promise combiner
 */
@SuppressWarnings({ "unchecked", "rawtypes" })
public void add(Future future) {
  checkAddAllowed();
  ++expectedCount;
  future.addListener(listener);
}

代码示例来源:origin: redisson/redisson

/**
 * Adds a new future to be combined. New futures may be added until an aggregate promise is added via the
 * {@link PromiseCombiner#finish(Promise)} method.
 *
 * @param future the future to add to this promise combiner
 */
@SuppressWarnings({ "unchecked", "rawtypes" })
public void add(Future future) {
  checkAddAllowed();
  ++expectedCount;
  future.addListener(listener);
}

代码示例来源:origin: netty/netty

@Override
protected void doResolve(final InetSocketAddress unresolvedAddress, final Promise<InetSocketAddress> promise)
    throws Exception {
  // Note that InetSocketAddress.getHostName() will never incur a reverse lookup here,
  // because an unresolved address always has a host name.
  nameResolver.resolve(unresolvedAddress.getHostName())
      .addListener(new FutureListener<InetAddress>() {
        @Override
        public void operationComplete(Future<InetAddress> future) throws Exception {
          if (future.isSuccess()) {
            promise.setSuccess(new InetSocketAddress(future.getNow(), unresolvedAddress.getPort()));
          } else {
            promise.setFailure(future.cause());
          }
        }
      });
}

代码示例来源:origin: netty/netty

@Override
protected void doResolveAll(String inetHost, final Promise<List<InetAddress>> promise) throws Exception {
  nameResolver.resolveAll(inetHost).addListener(new FutureListener<List<InetAddress>>() {
    @Override
    public void operationComplete(Future<List<InetAddress>> future) throws Exception {
      if (future.isSuccess()) {
        List<InetAddress> inetAddresses = future.getNow();
        if (!inetAddresses.isEmpty()) {
          // create a copy to make sure that it's modifiable random access collection
          List<InetAddress> result = new ArrayList<InetAddress>(inetAddresses);
          // rotate by different distance each time to force round robin distribution
          Collections.rotate(result, randomIndex(inetAddresses.size()));
          promise.setSuccess(result);
        } else {
          promise.setSuccess(inetAddresses);
        }
      } else {
        promise.setFailure(future.cause());
      }
    }
  });
}

代码示例来源:origin: Graylog2/graylog2-server

public void stop() {
  LOG.debug("Attempting to stop DNS client");
  if (nettyEventLoop == null) {
    LOG.error("DNS resolution event loop not initialized");
    return;
  }
  // Shutdown event loop (required by Netty).
  final Future<?> shutdownFuture = nettyEventLoop.shutdownGracefully();
  shutdownFuture.addListener(future -> LOG.debug("DNS client shutdown successful"));
}

代码示例来源:origin: netty/netty

@Override
protected void doResolveAll(final InetSocketAddress unresolvedAddress,
              final Promise<List<InetSocketAddress>> promise) throws Exception {
  // Note that InetSocketAddress.getHostName() will never incur a reverse lookup here,
  // because an unresolved address always has a host name.
  nameResolver.resolveAll(unresolvedAddress.getHostName())
      .addListener(new FutureListener<List<InetAddress>>() {
        @Override
        public void operationComplete(Future<List<InetAddress>> future) throws Exception {
          if (future.isSuccess()) {
            List<InetAddress> inetAddresses = future.getNow();
            List<InetSocketAddress> socketAddresses =
                new ArrayList<InetSocketAddress>(inetAddresses.size());
            for (InetAddress inetAddress : inetAddresses) {
              socketAddresses.add(new InetSocketAddress(inetAddress, unresolvedAddress.getPort()));
            }
            promise.setSuccess(socketAddresses);
          } else {
            promise.setFailure(future.cause());
          }
        }
      });
}

代码示例来源:origin: netty/netty

private EventLoop nextChild() throws Exception {
    if (shuttingDown) {
      throw new RejectedExecutionException("shutting down");
    }

    EventLoop loop = idleChildren.poll();
    if (loop == null) {
      if (maxChannels > 0 && activeChildren.size() >= maxChannels) {
        throw tooManyChannels;
      }
      loop = newChild(childArgs);
      loop.terminationFuture().addListener(childTerminationListener);
    }
    activeChildren.add(loop);
    return loop;
  }
}

代码示例来源:origin: netty/netty

@Override
protected void doResolve(final String inetHost, final Promise<InetAddress> promise) throws Exception {
  // hijack the doResolve request, but do a doResolveAll request under the hood.
  // Note that InetSocketAddress.getHostName() will never incur a reverse lookup here,
  // because an unresolved address always has a host name.
  nameResolver.resolveAll(inetHost).addListener(new FutureListener<List<InetAddress>>() {
    @Override
    public void operationComplete(Future<List<InetAddress>> future) throws Exception {
      if (future.isSuccess()) {
        List<InetAddress> inetAddresses = future.getNow();
        int numAddresses = inetAddresses.size();
        if (numAddresses > 0) {
          // if there are multiple addresses: we shall pick one by one
          // to support the round robin distribution
          promise.setSuccess(inetAddresses.get(randomIndex(numAddresses)));
        } else {
          promise.setFailure(new UnknownHostException(inetHost));
        }
      } else {
        promise.setFailure(future.cause());
      }
    }
  });
}

代码示例来源:origin: redisson/redisson

@Override
protected void doResolve(final InetSocketAddress unresolvedAddress, final Promise<InetSocketAddress> promise)
    throws Exception {
  // Note that InetSocketAddress.getHostName() will never incur a reverse lookup here,
  // because an unresolved address always has a host name.
  nameResolver.resolve(unresolvedAddress.getHostName())
      .addListener(new FutureListener<InetAddress>() {
        @Override
        public void operationComplete(Future<InetAddress> future) throws Exception {
          if (future.isSuccess()) {
            promise.setSuccess(new InetSocketAddress(future.getNow(), unresolvedAddress.getPort()));
          } else {
            promise.setFailure(future.cause());
          }
        }
      });
}

代码示例来源:origin: redisson/redisson

private EventLoop nextChild() throws Exception {
    if (shuttingDown) {
      throw new RejectedExecutionException("shutting down");
    }

    EventLoop loop = idleChildren.poll();
    if (loop == null) {
      if (maxChannels > 0 && activeChildren.size() >= maxChannels) {
        throw tooManyChannels;
      }
      loop = newChild(childArgs);
      loop.terminationFuture().addListener(childTerminationListener);
    }
    activeChildren.add(loop);
    return loop;
  }
}

代码示例来源:origin: apache/pulsar

@VisibleForTesting
CompletableFuture<List<InetAddress>> resolveName(String hostname) {
  CompletableFuture<List<InetAddress>> future = new CompletableFuture<>();
  dnsResolver.resolveAll(hostname).addListener((Future<List<InetAddress>> resolveFuture) -> {
    if (resolveFuture.isSuccess()) {
      future.complete(resolveFuture.get());
    } else {
      future.completeExceptionally(resolveFuture.cause());
    }
  });
  return future;
}

代码示例来源:origin: AsyncHttpClient/async-http-client

@Override
 public void call() {
  whenHandshaked.addListener(f -> {
   if (f.isSuccess()) {
    sendNextRequest(nextRequest, future);
   } else {
    future.abort(f.cause());
   }
  }
  );
 }
});

代码示例来源:origin: netty/netty

private void doResolveRec(final String inetHost,
             final Promise<T> promise,
             final int resolverIndex,
             Throwable lastFailure) throws Exception {
  if (resolverIndex >= resolvers.length) {
    promise.setFailure(lastFailure);
  } else {
    NameResolver<T> resolver = resolvers[resolverIndex];
    resolver.resolve(inetHost).addListener(new FutureListener<T>() {
      @Override
      public void operationComplete(Future<T> future) throws Exception {
        if (future.isSuccess()) {
          promise.setSuccess(future.getNow());
        } else {
          doResolveRec(inetHost, promise, resolverIndex + 1, future.cause());
        }
      }
    });
  }
}

代码示例来源:origin: netty/netty

private void doResolveAllRec(final String inetHost,
               final Promise<List<T>> promise,
               final int resolverIndex,
               Throwable lastFailure) throws Exception {
    if (resolverIndex >= resolvers.length) {
      promise.setFailure(lastFailure);
    } else {
      NameResolver<T> resolver = resolvers[resolverIndex];
      resolver.resolveAll(inetHost).addListener(new FutureListener<List<T>>() {
        @Override
        public void operationComplete(Future<List<T>> future) throws Exception {
          if (future.isSuccess()) {
            promise.setSuccess(future.getNow());
          } else {
            doResolveAllRec(inetHost, promise, resolverIndex + 1, future.cause());
          }
        }
      });
    }
  }
}

代码示例来源:origin: eclipse-vertx/vert.x

public void resolveHostname(String hostname, Handler<AsyncResult<InetAddress>> resultHandler) {
 ContextInternal callback = (ContextInternal) vertx.getOrCreateContext();
 io.netty.resolver.AddressResolver<InetSocketAddress> resolver = resolverGroup.getResolver(callback.nettyEventLoop());
 io.netty.util.concurrent.Future<InetSocketAddress> fut = resolver.resolve(InetSocketAddress.createUnresolved(hostname, 0));
 fut.addListener(a -> {
  callback.runOnContext(v -> {
   if (a.isSuccess()) {
    InetSocketAddress address = fut.getNow();
    resultHandler.handle(Future.succeededFuture(address.getAddress()));
   } else {
    resultHandler.handle(Future.failedFuture(a.cause()));
   }
  });
 });
}

代码示例来源:origin: netty/netty

private void doHealthCheckOnRelease(final Channel channel, final Promise<Void> promise) throws Exception {
  final Future<Boolean> f = healthCheck.isHealthy(channel);
  if (f.isDone()) {
    releaseAndOfferIfHealthy(channel, promise, f);
  } else {
    f.addListener(new FutureListener<Boolean>() {
      @Override
      public void operationComplete(Future<Boolean> future) throws Exception {
        releaseAndOfferIfHealthy(channel, promise, f);
      }
    });
  }
}

代码示例来源:origin: netty/netty

private void doHealthCheck(final Channel ch, final Promise<Channel> promise) {
  assert ch.eventLoop().inEventLoop();
  Future<Boolean> f = healthCheck.isHealthy(ch);
  if (f.isDone()) {
    notifyHealthCheck(f, ch, promise);
  } else {
    f.addListener(new FutureListener<Boolean>() {
      @Override
      public void operationComplete(Future<Boolean> future) throws Exception {
        notifyHealthCheck(future, ch, promise);
      }
    });
  }
}

代码示例来源:origin: redisson/redisson

private void doHealthCheckOnRelease(final Channel channel, final Promise<Void> promise) throws Exception {
  final Future<Boolean> f = healthCheck.isHealthy(channel);
  if (f.isDone()) {
    releaseAndOfferIfHealthy(channel, promise, f);
  } else {
    f.addListener(new FutureListener<Boolean>() {
      @Override
      public void operationComplete(Future<Boolean> future) throws Exception {
        releaseAndOfferIfHealthy(channel, promise, f);
      }
    });
  }
}

代码示例来源:origin: redisson/redisson

private void doHealthCheck(final Channel ch, final Promise<Channel> promise) {
  assert ch.eventLoop().inEventLoop();
  Future<Boolean> f = healthCheck.isHealthy(ch);
  if (f.isDone()) {
    notifyHealthCheck(f, ch, promise);
  } else {
    f.addListener(new FutureListener<Boolean>() {
      @Override
      public void operationComplete(Future<Boolean> future) throws Exception {
        notifyHealthCheck(future, ch, promise);
      }
    });
  }
}

代码示例来源:origin: AsyncHttpClient/async-http-client

public void close() {
 if (allowReleaseEventLoopGroup) {
  eventLoopGroup
      .shutdownGracefully(config.getShutdownQuietPeriod(), config.getShutdownTimeout(), TimeUnit.MILLISECONDS)
      .addListener(future -> doClose());
 } else {
  doClose();
 }
}

相关文章