问题描述
我正在尝试解决与通信Master --> Queue --> Workers
相关的设计问题。 Master
在Queue
中提交计算请求,其中一些Workers
将其处理。我想使此操作join
可行且cancel
可行,使其与Fiber
所提供的功能完全一样。
问题在于文档中指定的Fiber
的定义如下:
Fiber
代表Concurrent
数据类型的(纯)结果(例如IO
)可以同时启动,可以加入也可以 已取消。
据我了解,Fiber
应该用于并发(非分布式)计算。但是在我的情况下,cancel
意味着向工作人员发送取消消息,而join
意味着正在等待来自工作人员的消息,这意味着完成。这是它的样子
private def awaitFinishMessage[F[_]](taskId: Int): F[Unit] = //...
private def sendCancellationMessage(taskId: Int): F[Unit] = //...
sealed trait ComputationMeat
private def startComputation(meta: ComputationMeat): F[Int] = //...
def start[F[_]](meta: ComputationMeat): F[Fiber[F,Unit]] = for {
taskId <- startComputation(meta)
} yield Fiber.apply(awaitFinishMessage(taskId),sendCancellationMessage(taskId))
问题:是Fiber
的一个唯一/不常见/意外的用例,用于表示可调用/可联接的 分布式 计算队列(例如Kafka或其他)作为中间件?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)