是否有使用" Akkling.Cluster.Sharding"?在演员之间发送消息的示例?

时间:2017-03-16 17:11:00

标签: f# akka.net akka-cluster akka.net-cluster akka.fsharp

这可能是duplicate

因此,我取得了一些进展。但是,我发现将reference documentation from the C# API解释为所需的Akka.FSharp API很有挑战性。

是否有使用" Akkling.Cluster.Sharding"?

在演员之间发送消息的示例

截至目前,我只能从我的客户端程序而不是演员发送消息。

true

上面的代码有效。但是,它仅适用于字符串作为消息。我仍在努力让演员用各种类型的消息向对方发送消息。

注意:

我得到了Akka.Persistence.SqlServer插件。

但是,我不清楚如何在Akkling.Cluster.Sharding中改进following setup

validation

具体来说,我的印象是在分片集群系统中需要分片区域才能在演员之间来回发送消息。

作为对这种范式不熟悉的人,我正在努力创造一个简单的'#hello world"使用分片功能在两个演员之间键入消息传递程序。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果希望分片节点是分片actor的有效主机/容器,则它必须运行与该类型的actor关联的分片区域。发送到分片actor的所有消息都通过shardRegion引用发送。

在第一个示例代码段中,您已经证明,字符串消息是唯一有效的消息类型,可能是因为您的consumer行为将字符串作为唯一有效的消息类型。

正如您在spawnSharded definition中看到的那样,它需要4个参数。这里重要的是第一个,它是一个函数,用于解析分片插件所需的所有信息,以便将消息路由到有效的actor /实体。此方法返回一个元组,其中:

  • 第一个元素是分片的标识符,目标实体存在于其中。
  • 第二个元素是实体本身在其分片范围内的标识符。因此,要在群集中的所有其他实体中唯一标识实体,它必须提供唯一的shard-id / entity-id对。
  • 第三个参数是将要发送给实体的实际消息。它的类型应该与用作演员行为的递归循环函数输入的类型相匹配 - 如果你已经显示,它可能是一个普通的对象。

由于在该示例中,此消息解析器函数为id(标识),因此我们将元组直接发送到分片区域。您可以将该功能更改为您想要指定自定义内容的任何其他内容。

PS:如果您有更多问题,可以找到Akka.NET gitter channel