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 이벤트소싱버전을 로컬에서 수행해볼수 있습니다.
이벤트 스토어 확인
- 이벤트 스토어가 객체자체를 다루기때문에 객체변경시 호환버전과 고성능 직렬화 낭비없은 저장소등은 부가과제로 akka persist tool에서 어느정도 신경을 덜쓰게하지만 중요한 개념입니다
여기서 설명하고 작동된 액터모델을 통해 작동된 이벤트 스토어를 확인할수 있습니다.
...
이러한 개발패러다임의 변화는 데이터중심적 기획및 설계도 중요하지만 이벤트드리븐 도입을 통한 이벤트 스토밍 방식으로 복잡한 도메인모델을 가속화하는 방법론으로 확장됩니다. -개발만 이것을 적용한다고 가치있게 작동하지않게됨작동하지않으며 DDD를 학습하는 개념으로 시작합니다.
적용할수 있는 도메인영역
- 세그멘트분석기능에서 배치 대규모로 처리하는것이 아닌~ 세그멘트에 영향주는 이벤트는 저널로구성하고 계산되어야할 중요 세그멘트를 스트림으로 상태보유 -광고플랫폼
- 채팅히스토리를 즉각 CRUD하는것이아닌 핵심기능을 실시간으로 작동시키고 파생된 이벤트를 저널로 작동하고 Read기능을 완전분리 -채팅플랫폼
- 월렛의 입출금이력을 마지막값이 아닌 저널로 작동하고 재생을통해 최종월렛 잔여파악 -핀테크
- 장바구니를 담은것만 관리하는것이 아닌 빼고넣고를 저널로 구성해~ 장바구니를 통한 소비결정심리분석기능 -커머스
샘플코드
- RavenDB를 로컬 구동하는 도커스크립트와 유닛테스트설정은 위와같이 IDE에 구성되어 유닛테스트를 통해 작동시킬수 있습니다.
...


