Page History
...
백그라운드에서 순차적으로 또는 분리된 리모트에서 해당이벤트를 처리할수 있습니다. ( AkkaRemote또는 Kafka가 활용될수 있습니다.)
여기서의 샘플은 Actor메시지 로컬메시지큐가 사용되어, 백그라운드에서 블락없이 작동되며 Remote로 확장또는 Kafka로의 연결로 확장할수 있습니다.
그래프 이벤트를 처리하는 액터
Code Block | ||
---|---|---|
| ||
namespace SearchApi.Actors { public class GraphElementIdenty { public string Alice { get; set; } public string Name { get; set; } } public class GraphEvent { public string Action { get; set; } // Create , Relation, Reset public string Alice { get; set; } // AliceName public string Name { get; set; } public GraphElementIdenty From { get; set; } public GraphElementIdenty To { get; set; } } public class GraphEventActor : ReceiveActor { private readonly ILoggingAdapter logger = Context.GetLogger(); private readonly GraphEngine graphEngine; public GraphEventActor(GraphEngine _graphEngine) { logger.Info($"Create GraphEventActor:{Context.Self.Path.Name}"); graphEngine = _graphEngine; ReceiveAsync<GraphEvent>(async graphEvent => { var cypher = await _graphEngine.GetCypher(); switch (graphEvent.Action) { case "Reset": { await _graphEngine.RemoveAll(); } break; case "Create": { await cypher.Write .Create($"(alice:{graphEvent.Alice} {{name:'{graphEvent.Name}'}})") .ExecuteWithoutResultsAsync(); } break; case "Relation": { await cypher.Write .Match($"(a:{graphEvent.From.Alice}),(b:{graphEvent.To.Alice})") .Where($"a.name = '{graphEvent.From.Name}' AND b.name = '{graphEvent.To.Name}'") .Create($"(a)-[r:{graphEvent.Name}]->(b)").ExecuteWithoutResultsAsync(); } break; } }); } } } |
추천데이터 이벤트를 심플하게 처리하는 액터기입니다.
Code Block | ||||
---|---|---|---|---|
| ||||
var graphEngine = app.ApplicationServices.GetService<GraphEngine>(); var graphEventActor = AkkaLoad.RegisterActor( "GraphEventActor", actorSystem.ActorOf(Props.Create<GraphEventActor>(graphEngine), "GraphEventActor" )); //Test For Graph graphEventActor.Tell(new GraphEvent() { Action = "Reset" }); graphEventActor.Tell(new GraphEvent() { Action = "Create", Alice = "Person", Name = "홍길동" }); graphEventActor.Tell(new GraphEvent() { Action = "Create", Alice = "Movie", Name = "스파이더맨" }); graphEventActor.Tell(new GraphEvent() { Action = "Relation", Name = "시청", From = new GraphElementIdenty() { Alice = "Person", Name = "홍길동" }, To = new GraphElementIdenty() { Alice = "Movie", Name = "스파이더맨" } }); |
...