duplicate 일 수 있습니다."Akkling.Cluster.Sharding"을 사용하여 액터간에 메시지를 보내는 예제가 있습니까?
따라서 저는 약간의 진전을 이루었습니다. 그러나 reference documentation from the C# API을 원하는 Akka.FSharp API으로 해석하는 것은 어려운 일입니다.
"Akkling.Cluster.Sharding"을 사용하여 액터간에 메시지를 보내는 예제가 있습니까?
현재로서는 클라이언트 프로그램에서 액터가 아닌 메시지 만 보낼 수 있습니다.
let consumer (actor:Actor<_>) msg =
printfn "\n%A received %A" (actor.Self.Path.ToStringWithAddress()) (box msg) |> string |> ignored
let system1 = System.create "cluster-system" (configurePort 2551)
let shardRegion1 = spawnSharded id system1 "printer" <| props (actorOf2 consumer)
shardRegion1 <! ("shard-1", "entity-1", "hello world 1")
위의 코드는 작동합니다. 그러나 문자열로만 메시지로 작동합니다. 저는 배우들이 다양한 메시지를 사용하여 서로에게 메시지를 보내도록 고심하고 있습니다.
참고 :
내가 작업 Akka.Persistence.SqlServer 플러그인을 얻었다.
그러나, 나는 Akkling.Cluster.Sharding 내 following setup 개조하는 방법에 대한 명확하지 않다 : 특히
open Akka.FSharp
let clusterHostActor =
spawn system1 nodeName <| fun (inbox: Actor<_>) ->
let cluster = Cluster.Get system1
cluster.Subscribe(inbox.Self, [| typeof<ClusterEvent.IClusterDomainEvent> |])
inbox.Defer(fun() -> cluster.Unsubscribe(inbox.Self))
let rec messageLoop() =
actor {
let! message = inbox.Receive()
match box message with
| :? ClusterEvent.MemberUp as event -> printfn "Member %s Joined the Cluster at %O" event.Member.Address.Host DateTime.Now
let sref = select (event.Member.Address.ToString() + "/user/listener") inbox
sref <! "Hello from clusterHostActor"
| :? ClusterEvent.MemberRemoved as event -> printfn "Member %s Left the Cluster at %O" event.Member.Address.Host DateTime.Now
| other -> printfn "Cluster Received event %O at %O" other DateTime.Now
return! messageLoop()
}
messageLoop()
을, 나는 샤드 영역에 분산됩니다 클러스터 시스템 내에서 필요하다는 인상이었다 배우들 사이에서 메시지를주고받을 수 있습니다.
이 패러다임에 익숙하지 않은 분으로서 샤딩 기능을 사용하는 두 명의 액터간에 간단한 "hello world"유형의 메시징 프로그램을 만드는 데 어려움을 겪고 있습니다.
제안 사항?