Versions Compared

Key

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

...

이러한 전송 기법을 발사후 망각이라고도 불리며

Fire and forgot : 전투기 조종모델에서, 적군 탱크에 유도 미사일을 쏘고나면

알아서 맞을테니... 그것을 잊고 나는 살아야겠으니, 적전투기의 추격을 피하는데 집중을 하겠다.  

전투 전술용어라고 합니다. 이때 액터에서는 Tell 을 사용하며

반대로, 결과를 알고싶으면 알고 싶으면 Ask를  사용하여 결과값을 체크하거나 비동기모듈을 동기적 처리로 변환 할수 기다릴수 있습니다.

이것은 비동기적으로 설계된 액터가, 언제든 동기적으로 운영이가능하며

동기적으로 작성된 함수도, 비동기적으로 변환이 가능합니다.  - Future and Promise#futureactor


액터 설계부분

여기서 언급되지 않는 데이터 구조체는, 위에서 언급한 At-Least-Once Delivery에서 가져옵니다.

...

AkkaStream은 처리 흐름제어를 조금더 유연하게 할수가 있습니다.


아래 샘플은 초당 1개의 메시지만 처리하도록준 옵션이며

단지, Throttle 라는 흐름량을 제어하는 밸브같은것을 추가하였습니다.

Code Block
languagec#
themeEmacs
ActorSystem actorSystem;
ActorMaterializer materializer;
KafkaOptions kfka_options;
BrokerRouter kfka_router;

kfka_options = new KafkaOptions(new Uri("http://localhost:9092"), new Uri("http://localhost:9092"));
kfka_router = new BrokerRouter(kfka_options);
var client = new Producer(kfka_router);

actorSystem = ActorSystem.Create("ServiceB");
var materializer = actorSystem.Materializer();

Source<int, NotUsed> source = Source.From(Enumerable.Range(1, 10));
var factorials = source.Scan(1, ( acc, next ) => acc + next);

factorials
     .Throttle(1, TimeSpan.FromSeconds(1), 1, ThrottleMode.Shaping)
     .RunForeach(i => {
         Console.WriteLine("SendOne");
         client.SendMessageAsync("test", new[] { new Message(i.ToString()) });
     }, materializer);

...