当前位置: 首页 > 知识库问答 >
问题:

伊奥。grpc。StatusRuntimeException:从App Engine查询Secret Manager时超过了截止时间

单于皓轩
2023-03-14

我正在尝试使用应用程序引擎应用程序中的listSecrets()在Secret Manager中列出机密,但grpc请求在60秒后一直超时:

com.google.api.gax.rpc.DeadlineExceededException: io.grpc.StatusRuntimeException: DEADLINE_EXCEEDED: Deadline exceeded after 59.973305176s.
        at com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:51)
        at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:72)
        at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:60)
        at com.google.api.gax.grpc.GrpcExceptionCallable$ExceptionTransformingFuture.onFailure(GrpcExceptionCallable.java:97)
        at com.google.api.core.ApiFutures$1.onFailure(ApiFutures.java:68)
        at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1074)
        at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:30)
        at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1213)
        at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:983)
        at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:771)
        at io.grpc.stub.ClientCalls$GrpcFuture.setException(ClientCalls.java:563)
        at io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:533)
        at io.grpc.internal.DelayedClientCall$CloseListenerRunnable.runInContext(DelayedClientCall.java:406)
        at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
        Suppressed: com.google.api.gax.rpc.AsyncTaskException: Asynchronous task failed

我验证了我可以使用应用引擎中的其他GCP服务,并且我的应用引擎默认服务号具有秘密管理器角色。我的应用程序是标准环境Java第二代应用程序。我使用的是的v23.0.0库-bom(最新的)。当我在本地运行时,同样的代码工作正常,不会超过几秒钟,所以我想知道这是应用引擎环境还是其服务号的问题。

更新:我最终使用了google api services secretmanager/google api client/google-auth-library-oauth2-http。这个截取在本地和应用程序引擎上运行良好。

var projectId = "<TODO>";
var credentials = GoogleCredentials.getApplicationDefault();
var secretManager = new SecretManager.Builder(
        new NetHttpTransport(),
        new GsonFactory(),
        new HttpCredentialsAdapter(credentials))
        .build();

ArrayList<Secret> secrets = new ArrayList<>();
String pageToken = null;
do {
    var response = secretManager.projects().secrets().list("projects/" + projectId)
            .setPageToken(pageToken)
            .execute();
    pageToken = response.getNextPageToken();
    secrets.addAll(response.getSecrets());
} while (pageToken != null);

共有1个答案

公西天逸
2023-03-14

我终于看了日志(不仅仅是例外),看到了这个

java.lang.IllegalStateException: Could not find policy 'pick_first'. Make sure its implementation is either registered to LoadBalancerRegistry or included in META-INF/services/io.grpc.LoadBalancerProvider from your jar files.
    at io.grpc.internal.AutoConfiguredLoadBalancerFactory$AutoConfiguredLoadBalancer.<init>(AutoConfiguredLoadBalancerFactory.java:92)
    at io.grpc.internal.AutoConfiguredLoadBalancerFactory.newLoadBalancer(AutoConfiguredLoadBalancerFactory.java:63)
    at io.grpc.internal.ManagedChannelImpl.exitIdleMode(ManagedChannelImpl.java:406)
    at io.grpc.internal.ManagedChannelImpl$RealChannel$2.run(ManagedChannelImpl.java:978)
    at io.grpc.SynchronizationContext.drain(SynchronizationContext.java:95)
    at io.grpc.SynchronizationContext.execute(SynchronizationContext.java:127)
    ...

这导致了Stackoverflow帖子和Github问题。

我的构建使用Maven Shade插件。两个工件,io。grpc:grpc grpclb,和io。grpc:grpc核心有一个META-INF/services/io。grpc。LoadBalancerProvider文件,但我想要的是grpc核心。在我的阴影配置中添加一个排除项修复了它:

<filter>
    <artifact>io.grpc:grpc-grpclb</artifact>
    <excludes>
        <exclude>META-INF/services/io.grpc.LoadBalancerProvider</exclude>
    </excludes>
</filter>
 类似资料:
  • 问题内容: 我正在使用C#在SQL数据库中进行一些繁重的工作。 我不断收到以下超时异常: 超时时间已到。在操作完成之前超时或服务器没有响应。该语句已终止。 我运行了大量查询(超过10万个查询),而导致该异常的并不是任何一个特定的查询-有时我会设法无一例外地完成所有这些查询。 一些例外来自作为较大事务的一部分运行的查询,某些例外来自独立运行的查询。 当我直接在SQL Server Managemen

  • 我正在使用Spring框架。使用NamedParameterJdbcTemplate时,如何设置查询超时?我注意到JdbcTemplate有一个setQueryTimeout(int queryTimeout)方法,但我还没有找到一种使用NamedParameterJdbcTemplate实现这一点的方法。它有一个getJdbcOperations()方法,但似乎没有公开setQueryTimeo

  • 尝试从Spring的事务中执行过程时收到此错误。 SQL状态[HY008];错误代码[0];查询超时了。;嵌套的异常是com。微软sqlserver。jdbc。SQLServerException:查询已超时。 当数据集较大时,这会在10分钟内发生。正在为此使用Azure SQL server。 尝试过: @事务(超时=18000) Azure DB未显示用于编辑远程查询超时时间选项的连接属性

  • 我有一个非常大的HBASE/Phoenix表,我试图使用SQLLINE查询它。我得到以下异常。我尝试在客户端和服务器上更改各种设置: 我试着将以上所有设置为6000000,但仍然得到同样的问题。有什么想法吗?原来的异常似乎是hbaseClient.calltimeoutException。

  • 问题内容: 我命中了要通过自定义开发层进行Solr的查询,而我在该层中超时的一些查询仍在solr实例中。solr中是否有一个可用于使特定查询超时的参数 问题答案: 如Solr中所述,客户端断开连接后查询继续吗?并写在Solr常见问题解答中 在内部,Solr不会使任何请求超时-它使更新和查询都需要花费很长时间才能完全处理。 但是在FAQ的同一位置 但是,用于运行Solr的servlet容器可能会对所

  • 我相信我可能不了解gRPC通道、存根和传输的工作原理。我有一个Android应用程序,它创建一个通道和一个阻塞存根,并在应用程序初始化时使用dagger将其注入。当我需要进行grpc调用时,我的客户机中有一个方法,它使用该存根调用一个方法。应用程序闲置一段时间后,所有my calls return Dutaline\u都出现了错误,尽管服务器日志中没有显示任何呼叫。 其中,我的客户机类有一个函数,