问题标签 [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.
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) 上):
- 启动 Activity A -> 按 Button 启动 Activity B。
// 第一次一切正常。我从服务器接收结果并显示这个。
关闭活动 B(按返回按钮或调用 onBackPressed 或完成)。
按下按钮开始活动 B。
// 此时我得到错误,如上所示。
我在 Lenovo A1000 (API 5.0.1) 和 Xiaomi Mi4c (5.0.1) 上收到此错误后:
启动 Activity A -> 按 Button 启动 Activity B。
关闭活动 B(按返回按钮或调用 onBackPressed 或完成)。
按下按钮开始活动 B。
// 一切正常
关闭活动 B(按返回按钮或调用 onBackPressed 或完成)。
最小化应用程序。
5-6 分钟或更长时间后回到活动 A。
开始活动 B。
// 在这一刻我总是得到这个错误。
重新启动应用程序后一切正常,但重新打开 Activity B 后出现错误。
谁知道我该如何解决这个问题?
我使用 Play Services Dynamic Security Provider(gRPC 需要它)。我安装了最新版本的 Google Play 服务(9.6.83)。它不能解决问题。
我通过以下代码创建 ManagedChannel:
创建 SpeechGrpc.SpeechStub :
build.gradle(模块:app)
build.gradle (项目)
感谢您的时间 :)
java - 如何在 gRPC 服务器中添加全局异常拦截器?
在 gRPC 中,如何添加一个全局异常拦截器来拦截任何RuntimeException
并向客户端传播有意义的信息?
例如,一个方法可能会divide
抛出message 。在服务器端,我可以写:ArithmeticException
/ by zero
如果客户端通过 denominator = 0 ,它将得到:
和服务器输出
客户不知道发生了什么。
如果我想将/ by zero
消息传递给客户端,我必须将服务器修改为:(如本问题所述)
如果客户端发送 denominator = 0 ,它将得到:
好,/ by zero
传给客户。
但问题是,在真正的企业环境中,会有很多RuntimeException
s ,如果我想把这些异常的消息传递给客户端,我必须尝试每一个方法来捕获,这非常麻烦。
是否有任何全局拦截器可以拦截每个方法,捕获RuntimeException
并触发onError
并将错误消息传播给客户端?这样我就不必RuntimeException
在我的服务器代码中处理 s 了。
非常感谢 !
笔记 :
grpc - grpc-java gradle 构建时出错
我在构建grpc-java
(https://github.com/grpc/grpc-java/)示例时收到附加错误。我在具有一个属性gradle.properties
的文件grpc-java\examples
夹中有文件,即skipCodegen=true
java - 如何在 java/android 中的 GRPC 中导入 .proto 文件中的数据类型?
我正在尝试使用 GRPC 协议制作应用程序。在我的 .proto 文件中,我需要导入时间戳类,根据谷歌文档,
import google/protobuf/timestamp.proto
我们应该如何添加到 proto 文件中。但它给了我错误
import google/protobuf/timestamp.proto 找不到或有错误
任何人都知道如何解决这个问题。
grpc - 处理 grpc java/node 上的客户端和服务器错误
我正在使用 grpc 在 Java 服务器和节点客户端之间进行通信。当他们中的任何一个死亡/崩溃时,另一个死去。
这是节点客户端死机时在 Java 服务器上引发的异常 -
这是 java 死亡时节点上抛出的异常:
问题 - 我如何处理这些异常?
我尝试添加 try/catch 并为线程添加未捕获的异常处理程序,但没有成功。
要初始化的 Java 代码 -
节点客户端处理程序(服务之一,所有其他服务使用相同的模式) -
java - 如何为 gRPC 记录客户端与服务器的连接?
如何为 gRPC 记录客户端与服务器的连接?
那是在连接客户端时发生的事件,我应该能够获取一些基本信息,例如 IP、版本并记录下来
来自 192.168.1.1 AppName 的 DATETIME 连接
java - 在 Java 中将 gRPC 服务绑定到 localhost
我有一个 gRPC 服务,我只想绑定到 localhost 地址。但是,我看不到在 Java 中这样做的方法。相反,它将绑定到所有地址。
这是我现在创建服务的方式:
ServerBuilder或Server上似乎没有公开的 API允许指定地址或网络接口。而 C++ API 有AddListentingPort。
那么Java中有没有办法限制服务侦听的IP或接口?
grpc - Protobuf 3 打破合约可加性
我在分布式环境(“微服务”)中使用 Protobuf 3 和 gRPC。
由于 Protobuf 3 中缺乏支持的未设置/缺失值,我遇到了以下与合同可加性相关的问题。
想象一下,我有服务 A以及Team B和Team C拥有的几个消费者服务B和C 。
如果我向服务 A 的合同添加一个字段,例如布尔值,首先它将具有默认值,该值将按原样写入数据库。
然后,团队 B更新他们的服务以使用更新的合同进行对话,并将“true”作为字段值传递。然后,团队 C仍然使用旧合同并调用相同的服务 - 值被替换为 false。但C队不是这个意思,而且他们根本不知道那个领域。
因此,服务 A 根本无法延长合同,因为由于各种原因没有更新的消费者仍然能够损害数据,而服务 A 对此无能为力。
在 Thrift 中,此类事情只需通过单次检查 ( .isSet()
) 即可完成。
有一些肮脏的解决方法,比如将原语包装到对象中,但它强制使用特定于库实现的按引用检查(至少在 java 中),这似乎比健壮的解决方案更糟糕。此外,最终,我必须将所有内容包装在包装器中,正如您想象的那样,这也不是很好的解决方案。
2017 年,您在 Protobuf 3 中使用哪些最佳实践来管理此类情况?您如何管理/协调团队/服务之间的合同更新?谢谢
注意:这个问题不完全是关于如何对未设置/缺失值实施不检测,而是关于如何忍受它并遵循 Protobuf 3 哲学。
java - 如何获取在 grpc-java 中调用的 rpc 方法的注释
我需要在使用不同的验证器调用不同的 rpc 方法之前验证请求。
所以我实现了像
并在我的 rpc 方法之前添加自定义注释
但是我发现在gRPC ServerInterceptor中找不到获取注解信息的方法。有没有办法像这样实现 grpc 请求验证?
grpc - 在客户端动态/运行时添加服务器
我正在使用 Consul 进行服务发现;并在客户端启动期间在 NameResolver.start(Listener listener) 中提供服务器列表。
- 我如何添加作为服务提供者加入的新服务器(在 Consul 中)
- 我正在使用循环;当其中一台服务器死亡时;它不断击中死服务器
- 你有一个样本可以重试 UNAVAILABLE 异常吗?我只想在放弃客户端之前至少重试一次。
先感谢您