gpt4 book ai didi

F# 循环依赖与消息处理

转载 作者:行者123 更新时间:2023-12-01 13:31:14 25 4
gpt4 key购买 nike

我正在尝试使用具有跨消息传递的复杂逻辑的参与者模型构建系统,因此有一个参与者从一开始就发送消息并监听传入的响应。此外,消息传递使用例如 UDP 数据报完成。

因此,给定的actor 取决于消息sender,这意味着系统必须首先创建消息sender。为了将传入消息传递给 actor,消息 listener 必须依赖于 actor(它执行类似于 actor.Post incomingMessage 的操作)。

问题是关于初始化顺序:似乎我应该首先创建 sender,然后是 actor,最后是 listener,但是如果系统将以这种方式构建,当 actor 已经发送消息并监听回复但监听器尚未初始化时,可能会丢失传入消息。当然,UDP也是不可靠的传输方式,可能会丢失一些消息,因此有一些机制可以防止系统故障。但就我而言,总体设计似乎已被打破。是否有任何解决方案或不同的设计原则?

最佳答案

通常,您在执行任何可能导致消息开始到达的操作之前,先整理出响应消息的机制。因此,如果您只希望它们在您已经发送某些消息时出现,请在配置监听器之前不要发送任何这些消息。

Actor 应该等到一切就绪后才能开始正常操作。

当然,并不总是可以 100% 确定这一点,因为您通常无法判断消息总线上是否正在监听您可能期望监听的任何其他内容,但如果这很重要,那也不是不合理的定义一些消息,不同的参与者可以使用这些消息来验证其他参与者是否已准备好在事情开始之前开始。

或者,您可以使用消息总线实现来存储消息,直到监听器主动检索它们。这允许在没有监听器存在的情况下发送消息而不会丢失消息,但是如果监听器不检索消息,消息队列的大小会增加,这可能会出现问题。

关于F# 循环依赖与消息处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45859062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com