问题标签 [grpc-java]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1609 浏览

java - Cloud Speech API 返回码 = UNAUTHENTICATED,原因 =java.io.IOException:获取服务帐户的访问令牌时出错:

我在我的应用程序中使用 Google Cloud Speech API(通过 gRPC 的 StreamingRecognize)进行语音识别。我遇到了在 Android 设备 API 级别 < 23 上进行身份验证的问题。

我不会每次都收到此错误,但仅限于特定情况。我有两个活动。让我们命名 A 和 B。

Activity A 有一个按钮,用于启动 Activity B。Activity B 与 Google Cloud Speech API 通信并在 TextView 中显示结果。

执行以下步骤后出现此错误(在三星 GT-P5110 (Android 4.2.2) 上):

  1. 启动 Activity A -> 按 Button 启动 Activity B。

// 第一次一切正常。我从服务器接收结果并显示这个。

  1. 关闭活动 B(按返回按​​钮或调用 onBackPressed 或完成)。

  2. 按下按钮开始活动 B。

// 此时我得到错误,如上所示。

我在 Lenovo A1000 (API 5.0.1) 和 Xiaomi Mi4c (5.0.1) 上收到此错误后:

  1. 启动 Activity A -> 按 Button 启动 Activity B。

  2. 关闭活动 B(按返回按​​钮或调用 onBackPressed 或完成)。

  3. 按下按钮开始活动 B。

// 一切正常

  1. 关闭活动 B(按返回按​​钮或调用 onBackPressed 或完成)。

  2. 最小化应用程序。

  3. 5-6 分钟或更长时间后回到活动 A。

  4. 开始活动 B。

// 在这一刻我总是得到这个错误。

重新启动应用程序后一切正常,但重新打开 Activity B 后出现错误。

谁知道我该如何解决这个问题?

我使用 Play Services Dynamic Security Provider(gRPC 需要它)。我安装了最新版本的 Google Play 服务(9.6.83)。它不能解决问题。

我通过以下代码创建 ManagedChannel:

创建 SpeechGrpc.SpeechStub :

build.gradle(模块:app)

build.gradle (项目)

感谢您的时间 :)

0 投票
9 回答
18919 浏览

java - 如何在 gRPC 服务器中添加全局异常拦截器?

在 gRPC 中,如何添加一个全局异常拦截器来拦截任何RuntimeException并向客户端传播有意义的信息?

例如,一个方法可能会divide抛出message 。在服务器端,我可以写:ArithmeticException/ by zero

如果客户端通过 denominator = 0 ,它将得到:

和服务器输出

客户不知道发生了什么。

如果我想将/ by zero消息传递给客户端,我必须将服务器修改为:(如本问题所述)

如果客户端发送 denominator = 0 ,它将得到:

好,/ by zero传给客户。

但问题是,在真正的企业环境中,会有很多RuntimeExceptions ,如果我想把这些异常的消息传递给客户端,我必须尝试每一个方法来捕获,这非常麻烦。

是否有任何全局拦截器可以拦截每个方法,捕获RuntimeException并触发onError并将错误消息传播给客户端?这样我就不必RuntimeException在我的服务器代码中处理 s 了。

非常感谢 !

笔记 :

0 投票
1 回答
712 浏览

grpc - grpc-java gradle 构建时出错

我在构建grpc-javahttps://github.com/grpc/grpc-java/)示例时收到附加错误。我在具有一个属性gradle.properties的文件grpc-java\examples夹中有文件,即skipCodegen=true

0 投票
1 回答
843 浏览

java - 如何在 java/android 中的 GRPC 中导入 .proto 文件中的数据类型?

我正在尝试使用 GRPC 协议制作应用程序。在我的 .proto 文件中,我需要导入时间戳类,根据谷歌文档, import google/protobuf/timestamp.proto 我们应该如何添加到 proto 文件中。但它给了我错误

import google/protobuf/timestamp.proto 找不到或有错误

任何人都知道如何解决这个问题。

0 投票
1 回答
1327 浏览

grpc - 处理 grpc java/node 上的客户端和服务器错误

我正在使用 grpc 在 Java 服务器和节点客户端之间进行通信。当他们中的任何一个死亡/崩溃时,另一个死去。

这是节点客户端死机时在 Java 服务器上引发的异常 -

这是 java 死亡时节点上抛出的异常:

问题 - 我如何处理这些异常?

我尝试添加 try/catch 并为线程添加未捕获的异常处理程序,但没有成功。

要初始化的 Java 代码 -

节点客户端处理程序(服务之一,所有其他服务使用相同的模式) -

0 投票
1 回答
2917 浏览

java - 如何为 gRPC 记录客户端与服务器的连接?

如何为 gRPC 记录客户端与服务器的连接?

那是在连接客户端时发生的事件,我应该能够获取一些基本信息,例如 IP、版本并记录下来

来自 192.168.1.1 AppName 的 DATETIME 连接

gRPC / Protobuf 接口版本控制相关

0 投票
1 回答
2337 浏览

java - 在 Java 中将 gRPC 服务绑定到 localhost

我有一个 gRPC 服务,我只想绑定到 localhost 地址。但是,我看不到在 Java 中这样做的方法。相反,它将绑定到所有地址。

这是我现在创建服务的方式:

ServerBuilderServer上似乎没有公开的 API允许指定地址或网络接口。而 C++ API 有AddListentingPort

那么Java中有没有办法限制服务侦听的IP或接口?

0 投票
2 回答
281 浏览

grpc - Protobuf 3 打破合约可加性

我在分布式环境(“微服务”)中使用 Protobuf 3 和 gRPC。

由于 Protobuf 3 中缺乏支持的未设置/缺失值,我遇到了以下与合同可加性相关的问题。

想象一下,我有服务 A以及Team BTeam C拥有的几个消费者服务B和C 。

如果我向服务 A 的合同添加一个字段,例如布尔值,首先它将具有默认值,该值将按原样写入数据库。

然后,团队 B更新他们的服务以使用更新的合同进行对话,并将“true”作为字段值传递。然后,团队 C仍然使用旧合同并调用相同的服务 - 值被替换为 false。C队不是这个意思,而且他们根本不知道那个领域。

因此,服务 A 根本无法延长合同,因为由于各种原因没有更新的消费者仍然能够损害数据,而服务 A 对此无能为力。

在 Thrift 中,此类事情只需通过单次检查 ( .isSet()) 即可完成。

有一些肮脏的解决方法,比如将原语包装到对象中,但它强制使用特定于库实现的按引用检查(至少在 java 中),这似乎比健壮的解决方案更糟糕。此外,最终,我必须将所有内容包装在包装器中,正如您想象的那样,这也不是很好的解决方案。

2017 年,您在 Protobuf 3 中使用哪些最佳实践来管理此类情况?您如何管理/协调团队/服务之间的合同更新?谢谢

注意:这个问题不完全是关于如何对未设置/缺失值实施不检测,而是关于如何忍受它并遵循 Protobuf 3 哲学

0 投票
1 回答
962 浏览

java - 如何获取在 grpc-java 中调用的 rpc 方法的注释

我需要在使用不同的验证器调用不同的 rpc 方法之前验证请求。

所以我实现了像

并在我的 rpc 方法之前添加自定义注释

但是我发现在gRPC ServerInterceptor中找不到获取注解信息的方法。有没有办法像这样实现 grpc 请求验证?

0 投票
3 回答
890 浏览

grpc - 在客户端动态/运行时添加服务器

我正在使用 Consul 进行服务发现;并在客户端启动期间在 NameResolver.start(Listener listener) 中提供服务器列表。

  1. 我如何添加作为服务提供者加入的新服务器(在 Consul 中)
  2. 我正在使用循环;当其中一台服务器死亡时;它不断击中死服务器
  3. 你有一个样本可以重试 UNAVAILABLE 异常吗?我只想在放弃客户端之前至少重试一次。

先感谢您