回调方法读取标题数据。使用grpcjava
我正在使用Protoc3.0,并编写了回调方法来使用java读取GRPC流数据回调方法读取标题数据。使用grpcjava,java,protocol-buffers,grpc,grpc-java,Java,Protocol Buffers,Grpc,Grpc Java,我正在使用Protoc3.0,并编写了回调方法来使用java读取GRPC流数据 @Override public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall( final MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) { return new F
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
final MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {
return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(
next.newCall(method, callOptions)) {
@Override
public void start(Listener<RespT> responseListener, Metadata headers) {
ClientCall.Listener<RespT> listener = new ClientCall.Listener<RespT>() {
@Override
public void onHeaders(Metadata headers) {
System.out.println("Header received" +headers);
super.onHeaders(headers);
}
};
super.start(listener, headers);
}
};
}
};
@覆盖
公用客户端呼叫截取呼叫(
最终方法描述符方法,调用选项调用选项,通道下一步){
返回新的ForwardingClientCall.SimpleForwardingClientCall(
next.newCall(方法,callOptions)){
@凌驾
公共void开始(侦听器响应侦听器、元数据头){
ClientCall.Listener侦听器=新建ClientCall.Listener(){
@凌驾
公共void onHeaders(元数据头){
System.out.println(“接收到的标题”+标题);
super.onHeaders(headers);
}
};
super.start(侦听器、头文件);
}
};
}
};
现在我看到的是,一旦我到达onhd,程序将无限期地等待。这正常吗。一旦执行了头方法,我如何恢复读取正常流数据
编辑-1
因此,链接将类似于-
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
final MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {
return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(
next.newCall(method, callOptions)) {
@Override
public void start(Listener<RespT> responseListener, Metadata headers) {
responseListener = new SimpleForwardingClientCallListener<RespT>(responseListener) {
@Override
public void onHeaders(Metadata headers) {
System.out.println("Header found"+ headers);
super.onHeaders(headers);
}
};
ClientCall.Listener<RespT> listener = new ClientCall.Listener<RespT>() {
@Override
public void onHeaders(Metadata headers) {
System.out.println("Header received" +headers);
super.onHeaders(headers);
}
};
super.start(listener, headers);
}
};
}
};
@覆盖
公用客户端呼叫截取呼叫(
最终方法描述符方法,调用选项调用选项,通道下一步){
返回新的ForwardingClientCall.SimpleForwardingClientCall(
next.newCall(方法,callOptions)){
@凌驾
公共void开始(侦听器响应侦听器、元数据头){
responseListener=新的SimpleForwardingClientCallListener(responseListener){
@凌驾
公共void onHeaders(元数据头){
System.out.println(“找到标题”+标题);
super.onHeaders(headers);
}
};
ClientCall.Listener侦听器=新建ClientCall.Listener(){
@凌驾
公共void onHeaders(元数据头){
System.out.println(“接收到的标题”+标题);
super.onHeaders(headers);
}
};
super.start(侦听器、头文件);
}
};
}
};
您没有链接到响应侦听器
。您应该对侦听器使用SimpleForwardingClientCallListener
,这与您对调用所做的操作类似
@Override
public void start(Listener<RespT> responseListener, Metadata headers) {
responseListener = new SimpleForwardingClientCallListener<RespT>(responseListener) {
...
@覆盖
公共void开始(侦听器响应侦听器、元数据头){
responseListener=新的SimpleForwardingClientCallListener(responseListener){
...
否,因为您仍然没有使用响应侦听器
。您需要删除`new ClientCall.Listener()`并将SimpleForwardingClientCallListener
传递给super.start()
。