Page History
...
더많은 라우터정보 참고: https://getakka.net/articles/actors/routers.html
응용편 - AKKA STREAM
Akka와 아두이노의 기기를 연결하였으며, Akka에서 제공하는 Stream에의해 속도흐름제어를 할수 있습니다.
참고 : https://petabridge.com/blog/why-akkadotnet-streams/
가변저항장치의 값에따라 속도가 변경되며, 흐름제어를 하는 ThrottleWork에게 숫자값을 전송하여 처리속도를 동적으로 변경할수 있습니다.
Code Block | ||
---|---|---|
| ||
using System;
using Akka;
using Akka.Actor;
using Akka.Event;
using Akka.Streams;
using Akka.Streams.Dsl;
using AkkaDotModule.Models;
namespace UnoAkkaApp.Actors
{
public class ThrottleWork : ReceiveActor
{
private readonly ILoggingAdapter logger = Context.GetLogger();
private IActorRef consumer;
private int countPerSec;
public ThrottleWork(int element, int maxBust)
{
countPerSec = element;
ReceiveAsync<SetTarget>(async target =>
{
consumer = target.Ref;
});
ReceiveAsync<int>(async count =>
{
countPerSec = count;
logger.Info($"ThrottleWork Spped:{countPerSec}");
});
ReceiveAsync<BatchList>(async batchMessage =>
{
int Count = batchMessage.Obj.Count;
Source<object, NotUsed> source = Source.From(batchMessage.Obj);
using (var materializer = Context.Materializer())
{
var factorials = source;
factorials
.Throttle(countPerSec, TimeSpan.FromSeconds(1), maxBust, ThrottleMode.Shaping)
.RunForeach(obj => {
var nowstr = DateTime.Now.ToString("mm:ss");
if (obj is BatchData batchData)
{
if (consumer != null) consumer.Tell(batchData);
}
}, materializer)
.Wait();
}
});
}
}
} |
작동영상 - 가변저항을 Stream에 연결하여 속도제어
View file | ||||
---|---|---|---|---|
|
단일기기에 배포하기
우노보드는 개발장비에 연결하여, 개발할때 유용하며(개발장비와 USB연결)
...