Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
themeEmacs
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에 구성되어 유닛테스트를 통해 작동시킬수 있습니다.

...