NamedInstance#
具名实例,可调用该类的 Function 方法构造实例所属类的成员函数,适用于面向对象编程场景。
-
template<typename InstanceType>
class NamedInstance# - 模板参数:
InstanceType - 实例类型。
公共方法
-
template<typename F>
InstanceFunctionHandler<F, InstanceType> Function(F memberFunc)# 构造具名实例中的成员函数,用于执行一次函数调用。
auto counter = YR::Instance(Counter::FactoryCreate, "name_1").Invoke(100); auto c = counter.Function(&Counter::Add).Invoke(1); std::cout << "counter is " << *YR::Get(c) << std::endl;
- 模板参数:
F - 成员函数类型。
- 参数:
memberFunc - 实例中需要执行的函数。实例绑定了类对象时,该函数必须是类的成员函数。
- 返回:
具名实例的函数
InstanceFunctionHandler类,该类提供成员方法Invoke用于执行函数调用。
-
template<typename R>
InstanceFunctionHandler<CppClassMethod<R>, InstanceType> CppFunction(const std::string &functionName)# 将 cpp 类成员函数调用请求发送给远程后端,由后端执行本次用户函数调用。
class Counter { public: int count; Counter() {} explicit Counter(int init) : count(init) {} static Counter *FactoryCreate() { int c = 10; return new Counter(c); } std::string RemoteVersion() { return "RemoteActor v0"; } }; YR_INVOKE(Counter::FactoryCreate, &Counter::RemoteVersion) int main(void) { YR::Config conf; YR::Init(conf); auto cppCls = YR::CppInstanceClass::FactoryCreate("Counter::FactoryCreate"); auto cppIns = YR::Instance(cppCls).Invoke(); auto obj = cppIns.CppFunction<std::string>("&Counter::RemoteVersion").Invoke(); auto res = *YR::Get(obj); std::cout << "add one result is " << res << std::endl; return 0; }
- 模板参数:
R - 返回值的类型。
- 参数:
functionName - cpp 类成员函数名。
- 返回:
InstanceFunctionHandler对象,可通过调用其成员函数Invoke进行实例方法的调用。
-
template<typename R>
InstanceFunctionHandler<PyClassMethod<R>, InstanceType> PyFunction(const std::string &functionName)# 将 python 类成员函数调用请求发送给远程后端,由后端执行本次用户函数调用。
int main(void) { // class Instance: // sum = 0 // // def __init__(self, init): // self.sum = init // // def add(self, a): // self.sum += a // // def get(self): // return self.sum YR::Config conf; YR::Init(conf); auto pyInstance = YR::PyInstanceClass::FactoryCreate("pycallee", "Instance"); // moduleName, className auto r1 = YR::Instance(pyInstance).Invoke(x); r1.PyFunction<void>("add").Invoke(1); // returnType, memberFunctionName auto r2 = r1.PyFunction<int>("get").Invoke(); auto res = *YR::Get(r2); std::cout << "PlusOneWithPyClass with result=" << res << std::endl; return res; return 0; }
- 模板参数:
R - 返回值的类型。
- 参数:
functionName - python 类成员函数名。
- 返回:
InstanceFunctionHandler对象,可通过调用其成员函数Invoke进行实例方法的调用。
-
template<typename R>
InstanceFunctionHandler<JavaClassMethod<R>, InstanceType> JavaFunction(const std::string &functionName)# 将 java 类成员函数调用请求发送给远程后端,由后端执行本次用户函数调用。
int main(void) { // package io.yuanrong.demo; // // // A regular Java class. // public class Counter { // // private int value = 0; // // public int increment() { // this.value += 1; // return this.value; // } // } YR::Config conf; YR::Init(conf); auto javaInstance = YR::JavaInstanceClass::FactoryCreate("io.yuanrong.demo.Counter"); auto r1 = YR::Instance(javaInstance).Invoke(); auto r2 = r1.JavaFunction<int>("increment").Invoke(1); auto res = *YR::Get(r2); std::cout << "PlusOneWithJavaClass with result=" << res << std::endl; return res; }
- 模板参数:
R - 返回值的类型。
- 参数:
functionName - java 类成员函数名。
- 返回:
InstanceFunctionHandler对象,可通过调用其成员函数Invoke进行实例方法的调用。
-
void Terminate()#
对于实例句柄,表示退出已创建的函数实例。对于
Range调度的句柄,表示退出已创建的一组函数实例。退出默认超时时间为 30 秒,在磁盘高负载、etcd 故障等场景下,处理时间可能超出,接口将抛出超时异常,用户可在捕获超时异常后选择是否重试。
auto counter = YR::Instance(Counter::FactoryCreate).Invoke(1); auto c = counter.Function(&Counter::Add).Invoke(1); std::cout << "counter is " << *YR::Get(c) << std::endl; counter.Terminate();
- 抛出:
Exception- 函数实例删除失败时抛出并携带错误信息。例如删除已提前退出的函数实例、收到删除函数实例响应超时等。
-
void Terminate(bool isSync)#
同步或异步退出实例。对于实例句柄,表示退出已创建的函数实例。对于
Range调度的句柄,表示退出已创建的一组函数实例。异步退出默认超时时间为 30 秒,在磁盘高负载、etcd 故障等场景下,处理时间可能超出,接口将抛出超时异常,用户可在捕获超时异常后选择是否重试。同步退出时该接口将阻塞直至实例完全退出。
auto counter = YR::Instance(Counter::FactoryCreate).Invoke(1); auto c = counter.Function(&Counter::Add).Invoke(1); std::cout << "counter is " << *YR::Get(c) << std::endl; counter.Terminate(true);
- 参数:
isSync - 是否开启同步。为 true 时表示发送信号量为 killInstanceSync 的请求,分布式内核将同步删除实例;若为 false 表示发送信号量为 killInstance 的请求,分布式内核将异步删除实例。
- 抛出:
Exception- 函数实例删除失败时抛出并携带错误信息。例如删除已提前退出的函数实例、收到删除函数实例响应超时等。
-
std::vector<NamedInstance<InstanceType>> GetInstances(int timeoutSec = NO_TIMEOUT)#
在超时时间内等待
Range调度完成,返回NamedInstance对象的列表。auto counter = YR::Instance(Counter::FactoryCreate).Invoke(1); auto c = counter.Function(&Counter::Add).Invoke(1); std::cout << "counter is " << *YR::Get(c) << std::endl; counter.Terminate();
- 参数:
timeoutSec - 超时时间,单位为秒。可选参数,默认值为
-1,表示无限等待。
- 抛出:
Exception- 超时时抛出。例如因资源不足导致实例未被调度,获取超时。- 返回:
NamedInstance对象列表,可通过迭代获取各个实例的句柄以进行调用。
-
FormattedMap Export() const#
导出
NamedInstance句柄信息,可被序列化存储在数据库或其他持久化工具中。auto counter = YR::Instance(Counter::FactoryCreate).Invoke(100); auto out = counter.Export();
- 返回:
以键值对形式存储的
NamedInstance句柄信息。
-
Import(FormattedMap &input)#
导入从数据库或其他持久化工具中读取并反序列化后的
NamedInstance句柄信息。NamedInstance<Counter> counter; counter.Import(in);
- 参数:
input - 以键值对形式存储的
NamedInstance句柄信息。