Page History
...
| Code Block | ||
|---|---|---|
| ||
public class SalesSimulatorActor : ReceiveActor
{
private readonly IActorRef _salesActor;
private ICancelable scheduler;
public SalesSimulatorActor(IActorRef salesActor)
{
_salesActor = salesActor;
// Schedule the first sale simulation immediately and then every 2 seconds:
scheduler = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(TimeSpan.Zero,
TimeSpan.FromSeconds(2), Self, new StartSimulate(), Self);
Receive<StartSimulate>(HandleStart);
Receive<StopSimulate>(HandleStop);
}
private void HandleStart(StartSimulate message)
{
ConsoleHelper.WriteToConsole(ConsoleColor.Black,
$"About to simulate a sale...");
Random random = new Random();
string[] products = { "Apple", "Google", "Nokia", "Xiaomi", "Huawei" };
var randomBrand = products[random.Next(products.Length)];
var randomPrice = random.Next(1, 6) * 100; // 100, 200, 300, 400, or 500
var nextSale = new Sale(randomPrice, randomBrand);
_salesActor.Tell(nextSale);
}
private void HandleStop(StopSimulate message)
{
scheduler.Cancel();
ConsoleHelper.WriteToConsole(ConsoleColor.DarkRed,
"Simulation stopped");
}
} |
...
- 액터모델은 액티브오브젝트의 패턴과 유사하며 카프카처럼 메일박스를 보유하고 능동적으로 작동할수 있는 특징이있어 상호작용 능동적 Agent를 만들게 될때도 유용할수있습니다.
- 이러한 기능은 재귀호출함수로도 심플하게 구현가능하지만 네트워크확장및 분산처리시 별도의 장치를 추가구현해야할수있지만~ 코드변경없이 분산확장 장치를 지원합니다.
- Raven에 제공하는 가이드를 유닛테스트로 옮겨두었으며 여기서 설명된 SaleActor 이벤트소싱버전을 로컬에서 수행해볼수 있습니다.
...
- 세그멘트분석기능에서 배치 대규모로 처리하는것이 아닌~ 세그멘트에 영향주는 이벤트는 저널로구성하고 계산되어야할 중요 세그멘트를 스트림으로 상태보유 -광고플랫폼
- 채팅히스토리를 즉각 CRUD하는것이아닌 핵심기능을 실시간으로 작동시키고 파생된 이벤트를 저널로 작동하고 Read기능을 완전분리 -채팅플랫폼
- 월렛의 입출금이력을 마지막값이 아닌 저널로 작동하고 재생을통해 최종월렛 잔여파악 -핀테크
- 장바구니를 담은것만 관리하는것이 아닌 빼고넣고를 저널로 구성해~ 장바구니를 통한 소비결정심리분석기능 -커머ㅛㅡ커머스
샘플코드
- RavenDB를 로컬 구동하는 도커스크립트와 유닛테스트설정은 위와같이 IDE에 구성되어 유닛테스트를 통해 작동시킬수 있습니다.
...

