动态绑定Thrift或gRPC中的服务/将服务作为参数传递

发布时间:2020-07-06 09:37

我与使用大量动态服务注册的现有系统一起使用,例如使用Andorid HIDL / AIDL:

多个对象实现:

IHandler { Response handleRequet(Id subset, Request r)}

一个对象实现:

class IHandlerCoordinator {
   Response handleRequet(Id subset, Request r);
   void RegisterHandler(std::vector<Id> subsets, IHandler handler_for_subset_ids);
}

启动/动态地将多个对象注册到IHandlerCoordinator中(传递它们可以处理的预期子集),然后IHandlerCoordinator将传入的请求分派给客户端。

在xIDL中,它需要将服务作为参数传递,如何在Thrift / gRPC中对其进行仿真?

回答1

要节俭:还没有回调之类的东西。关于该主题有一些讨论(请参阅邮件列表档案和/或JIRA),但没有实现。最大的挑战是以与运输无关的方式来实现它,因此当前的共识是,如果需要,您必须手动实现它。

从技术上讲,有两种一般的实现方法:

  • 也在客户端实现一个服务器实例,以接收回调
  • 集成长时间运行的呼叫或轮询机制,以通过客户端呼叫从服务器主动检索“回调”数据

使用gRPC更容易,因为gRPC专注于HTTP。 any kind of transport you can imagine从一开始就开放了Thrift。