grpc-rpc如何实现异步链式请求
业务中需要实现grpc请求的链式调用,服务流程如下所示:
client->serverA->serverB
在grpc服务端的创建CallData,代码如下所示:
class CallData {
public:
CallData(Save::AsyncService *service, ServerCompletionQueue *completionQueue) :
status_(CREATE),
service_(service),
completionQueue_(completionQueue),
responder_(&context_) {
//Invoke the sereving logic right away
Proceed();
}
void Proceed() {
if (CREATE == status_) {
status_ = PROCESS;
service_->Request(&context_, &request_, &responder_, completionQueue_, completionQueue_, this);
} else if (PROCESS == status_) {
new CallData(service_, completionQueue_, sender_);
//在此处新建异步请求吗?改写没有思路
status_ = FINISH;
responder_.Finish(reply_, Status::OK, this);
} else {
GPR_ASSERT(FINISH == status_);
delete this;
}
}
private:
enum CallStatus {
CREATE, PROCESS, FINISH
};
CallStatus status_;
//省略相关变量
};
在CallData的Proceed没有想到如何进行下一步的异步请求,以及如何处理返回的结果,求指教!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
class CallData {