我应该在我的grpc服务器处理的每个调用的开头和结尾处执行一些代码。
我使用ServerCall.Listener:
侦听器由注册到我的服务器的拦截器实例化。
但是有一个问题:它看起来有时候,即使监听器已被实例化,也不会调用onComplete或onCancel。
为了完全准确,如果另一个线程不是实例化侦听器的线程正在调用onComplete / onCancel,则也可能触发该问题。
是否应该发生其中一种情况?我使用的是grpc-netty版本1.6.1。
谢谢你的帮助!
答案 0 :(得分:3)
保证将调用onComplete / onCancel中的一个。
问题是“实例化侦听器的线程必须是将调用onComplete / onCancel的线程”。出于多种原因,这通常是不正确的:
监听器不需要是线程安全的,但应该是线程兼容的。您当前的实施is thread-hostile。
今天你的假设唯一一次是使用阻塞存根。但这是因为您不应该依赖的实施细节。