当前位置:  开发笔记 > 编程语言 > 正文

如果发送者演员已经离开,会有什么反应?

如何解决《如果发送者演员已经离开,会有什么反应?》经验,为你挑选了1个好方法。

请考虑以下示例.A hello_world actor发送一个"hello"字符串mirror actor,然后立即终止.world从...返回的响应会发生什么mirror actor?忽略?留在hello_world actor邮箱?镜子可以知道它的反应丢失了吗?

behavior mirror(event_based_actor* self)
{
    return { [=](std::string s){ return "world"; } };
}
void hello_world(event_based_actor* self, const actor& theMirror)
{
    self->send(theMirror, "hello");
}

mavam.. 5

请考虑以下示例.一个hello_world actor发送一个"hello"字符串来镜像actor,然后立即终止.镜像演员返回的响应世界会发生什么?忽略?留在hello_world演员邮箱?

假设hello_world已经终止.当CAF运行时将控制转移到mirror下一次时,该语句return "world"将尝试向发送方发送回复.由于发件人不再存在,运行时只是丢弃该邮件.

难道mirror知道它的反应会丢失吗?

TL; DR:如果您需要邮件传递保证,您必须在顶部实施自己的确认协议.

答案很长:通过监控一个演员,你可以挂钩它的终止.最终,这只是在监视actor的邮箱中排队一个特定的系统消息.假设没有消息重新排序的单跳场景,hello_world将发送消息,终止,然后运行时将向所有监视的actor发送DOWN消息hello_world.mirror然后,邮箱首先包含字符串,然后包含DOWN消息.这意味着mirror只能在尝试发送消息后检测到故障.

有一个例外:如果您mirror作为优先级感知的 actor生成,它可以根据优先级处理消息.将其视为每个actor的两个独立邮箱.CAF中的所有系统消息都具有高优先级,这意味着您可能在回复之前检测到故障,但仅当运行时将控制转移到邮箱中已存在的两个消息mirror之后.如果DOWN消息被延迟并且运行时将控制转移到只有位于邮箱中的字符串消息,那么您也无法检测到故障.mirrormirrormirror

也就是说,演员可以随时失败,运行时只能提供近实时的故障传播.因此,您的设计必须能够抵御此类故障,这意味着您必须使用自己的确认机制来实现可靠的消息传递.



1> mavam..:

请考虑以下示例.一个hello_world actor发送一个"hello"字符串来镜像actor,然后立即终止.镜像演员返回的响应世界会发生什么?忽略?留在hello_world演员邮箱?

假设hello_world已经终止.当CAF运行时将控制转移到mirror下一次时,该语句return "world"将尝试向发送方发送回复.由于发件人不再存在,运行时只是丢弃该邮件.

难道mirror知道它的反应会丢失吗?

TL; DR:如果您需要邮件传递保证,您必须在顶部实施自己的确认协议.

答案很长:通过监控一个演员,你可以挂钩它的终止.最终,这只是在监视actor的邮箱中排队一个特定的系统消息.假设没有消息重新排序的单跳场景,hello_world将发送消息,终止,然后运行时将向所有监视的actor发送DOWN消息hello_world.mirror然后,邮箱首先包含字符串,然后包含DOWN消息.这意味着mirror只能在尝试发送消息后检测到故障.

有一个例外:如果您mirror作为优先级感知的 actor生成,它可以根据优先级处理消息.将其视为每个actor的两个独立邮箱.CAF中的所有系统消息都具有高优先级,这意味着您可能在回复之前检测到故障,但仅当运行时将控制转移到邮箱中已存在的两个消息mirror之后.如果DOWN消息被延迟并且运行时将控制转移到只有位于邮箱中的字符串消息,那么您也无法检测到故障.mirrormirrormirror

也就是说,演员可以随时失败,运行时只能提供近实时的故障传播.因此,您的设计必须能够抵御此类故障,这意味着您必须使用自己的确认机制来实现可靠的消息传递.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有