These are chat archives for akkadotnet/akka.net

14th
Oct 2016
Arsene Tochemey GANDOTE
@Tochemey
Oct 14 2016 06:51
@Horusiath Hello please which IDE do you use for your F# coding?
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 07:00
@Tochemey both visual studio and vscode+ionide
Arsene Tochemey GANDOTE
@Tochemey
Oct 14 2016 07:01
@Horusiath Thank you. I am battling with Visual Studio
I am converting a C# Akka based project into F#
Gregorius Soedharmo
@Arkatufus
Oct 14 2016 07:29
whats the best way to route messages to akka from a web service? do you have the actorsystem object sitting in a static/singleton object and have, say, nancy refer to that whenever one of its module needs to send a message, or is there a better way doing it?
i'm having trouble visualizing the glue mechanism between the stateless part of the webservice api and the stateful part in akka
Arsene Tochemey GANDOTE
@Tochemey
Oct 14 2016 07:31
@Arkatufus I hope this tutorial can help you if I understand your question : https://petabridge.com/blog/akkadotnet-aspnet/
Gregorius Soedharmo
@Arkatufus
Oct 14 2016 07:32
ok, thanks, i'll look into that
Arsene Tochemey GANDOTE
@Tochemey
Oct 14 2016 07:32
Welcome Broz
verilocation
@verilocation
Oct 14 2016 07:46
@Danthar thanks for the reply last night :)
Andrey Leskov
@andreyleskov
Oct 14 2016 09:25
Hi all! I'm running Akka.net in WebApp, and logs says it is restarted each 20 min, casing a lot of mess. Is their any reason why ActorSystem can restart itself ? Main suspect now is WebApp itself
verilocation
@verilocation
Oct 14 2016 09:26
Is this a C# web app? Quite often IIS can recycle the memory if its been unused for a while, this could be a potential cause
Andrey Leskov
@andreyleskov
Oct 14 2016 09:26
it is Azure WebApp
and it is configured to be "always on"
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 09:31
@andreyleskov it's rather web app, actor system cannot just restart itself
Andrew Buttigieg
@andrewbuttigieg
Oct 14 2016 11:18
Doing some experiments with Mediator, is it possible to use .Ask with it?
//Works:
var whoIsThereMessage = EchoActor.Ask(new KnockKnockMessage()).Result;

//Does not work
var knockKnock = new Publish("echo", new KnockKnockMessage());
var whoIsThereMessage = Mediator.Ask(knockKnock).Result;
Andrew Buttigieg
@andrewbuttigieg
Oct 14 2016 11:40
I think it won't work since Ask works on an ICanTell where are Mediator needs a topic to work.
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 11:43
@andrewbuttigieg no it wont work. However you may use something like that:
var knockKnock = new Publish("echo", new KnockKnockMessage(replyTo: Self));
and on the receiver side instead of Sender.Tell use knockMessage.ReplyTo.Tell
Andrew Buttigieg
@andrewbuttigieg
Oct 14 2016 11:44
I think that won't work since the Receive is not triggered
public static Task<object> Ask(this ICanTell self, object message, TimeSpan? timeout = default(TimeSpan?));
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 11:45
are you Asking from within the actor itself or outside of the actor system?
Andrew Buttigieg
@andrewbuttigieg
Oct 14 2016 11:46
I am doing the call from an actor.
Looks like this
public class EchoQueryActor: ReceiveActor
    {
        IActorRef Mediator { get; }
        //IActorRef EchoActor { get; }
        public EchoQueryActor()
        {
            //EchoActor = Context.System.ActorOf(Props.Create(() => new EchoActor()), "EchoActor");
            Mediator = Akka.Cluster.Tools.PublishSubscribe.DistributedPubSub.Get(Context.System).Mediator;

            Receive<KnockKnockMessage>(msg =>
            {
                //Works:
                //var whoIsThereMessage = EchoActor.Ask(new KnockKnockMessage()).Result;

                //Does not work
                var knockKnock = new Publish("echo", new KnockKnockMessage());
                var whoIsThereMessage = Mediator.Ask(knockKnock).Result;

                //Mediator.Tell(new Publish("echo", new KnockKnockMessage()));
                //var whoIsThereMessage = Mediator.Ask(new Publish("echo", new KnockKnockMessage())).Result;
                //var whoIsThereMessage = Mediator.Ask<WhoIsThereMessage>(new KnockKnockMessage()).Result;

                Console.WriteLine(whoIsThereMessage);
            });
        }
    }
and the receiving actor is
Arsene Tochemey GANDOTE
@Tochemey
Oct 14 2016 11:47
Why can't use forward instead of Ask?
because you want to result back
Andrew Buttigieg
@andrewbuttigieg
Oct 14 2016 11:48
public class EchoActor:ReceiveActor
    {
        public const string Topic = "echo";

        //public readonly Cluster Cluster = Cluster.Get(Context.System);
        public readonly IActorRef Mediator;

        public EchoActor()
        {
            Mediator = DistributedPubSub.Get(Context.System).Mediator;
            Mediator.Tell(new Subscribe(Topic, Self));

            Receive<ClusterMessage>(echo => Console.WriteLine($"{DateTime.Now}: {echo.Message}"));
            Receive<KnockKnockMessage>(msg => Sender.Tell(new WhoIsThereMessage("Me!!")));
            Receive<SubscribeAck>(ack =>
                Console.WriteLine("Actor [{0}] has subscribed to topic [{1}]", ack.Subscribe.Ref, ack.Subscribe.Topic));
        }

        protected override void PostStop()
        {
            Mediator.Tell(new Unsubscribe(Topic, Self));
            base.PostStop();
        }
    }
Arsene Tochemey GANDOTE
@Tochemey
Oct 14 2016 11:49
PLease have a look at this link I hope it will help : http://bartoszsypytkowski.com/dont-ask-tell-2/
because it is recommended not to ask within Actors.
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 11:51
@andrewbuttigieg you can modify that code to:
public class EchoQueryActor: ReceiveActor
{
    public EchoQueryActor()
    {
        var mediator = Akka.Cluster.Tools.PublishSubscribe.DistributedPubSub.Get(Context.System).Mediator;

        Receive<KnockKnockMessage>(msg =>
        {
            var knockKnock = new Publish("echo", new KnockKnockMessage(replyTo: Self));
            Mediator.Tell(knockKnock);
        });

        Receive<WhoIsThereMessage>(whoIsThere =>
        {
            Console.WriteLine(whoIsThere);
        });
    }
}

public class EchoActor:ReceiveActor
{
    public const string Topic = "echo";

    public readonly IActorRef Mediator;

    public EchoActor()
    {
        Mediator = DistributedPubSub.Get(Context.System).Mediator;
        Mediator.Tell(new Subscribe(Topic, Self));

        Receive<KnockKnockMessage>(msg => msg.ReplyTo.Tell(new WhoIsThereMessage("Me!!")));
    }

    protected override void PostStop()
    {
        Mediator.Tell(new Unsubscribe(Topic, Self));
        base.PostStop();
    }
}
and like @Tochemey said, don't use Ask from within of the actors
Andrew Buttigieg
@andrewbuttigieg
Oct 14 2016 11:55
Ok, that would work for me.
Seems like Ask is an antipattern nearly?
Arsene Tochemey GANDOTE
@Tochemey
Oct 14 2016 11:55
Yeah
Andrew Buttigieg
@andrewbuttigieg
Oct 14 2016 12:08
Thanks guys
Garrard Kitchen
@garrardkitchen
Oct 14 2016 12:08
Hi @corneliutusnea, thanks for replying. Yup, I stumbled across this one too last night. I've now jumped across to AWS and trialing with Beanstalk and all is good in the world again! It looks like for the short term we'll have to go this route as I'm just not prepared to sacrifice the pure brilliance that akka.net is just because of Azure and the obvious disconnect they [MS] have with DevOps and real life and your typical migration path. I mapped out a few possibilities and I'm using the path of least resistance initially to guide me. Once again, thanks for help.
verilocation
@verilocation
Oct 14 2016 12:09
Sorry to butt in.. I use Ask lots within Actors.. is this wrong? For example some data will come in, I'll ask my routees (geocode actor) to process a geocode request. The geocode actor will ask another actor whether its been cached or not, and await the response.... Is this the wrong way to do it?
Andrew Buttigieg
@andrewbuttigieg
Oct 14 2016 12:10
@verilocation what if the actor never replies?
verilocation
@verilocation
Oct 14 2016 12:10
itll time out and ask google, at least that was the plan :)
Arsene Tochemey GANDOTE
@Tochemey
Oct 14 2016 12:11
if you can try as much as possible not to use it.
verilocation
@verilocation
Oct 14 2016 12:13
what would be the alternative? I had initially thought about just using tells.. but then you have a problem regarding persistence... eventually this data (and associated geocode information) will be put in the database... if the geocode service is just "Tell"ed then theres a chance it could persist its data first, which would probably screw up the db.... theres also another problem of then thats two database writes as opposed to one (we deal with lots and lots of info so keeping db writes low is important)
Arsene Tochemey GANDOTE
@Tochemey
Oct 14 2016 12:13
Please @verilocation have look at this http://bartoszsypytkowski.com/dont-ask-tell-2/
very useful and helpful
It helped me a lot
verilocation
@verilocation
Oct 14 2016 12:14
Thanks a lot, I will do :)
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 12:43
@verilocation ask is generally speaking bad for performance (up to 50 times slower than using tell exchange on the same machine). It's also allocating a lot. Ask is generally made to have request/response communication from outside of the actor system.
@andrewbuttigieg one way is to have Context.SetReceiveTimeout - it will send ReceiveTimeout message to current actor if it won't get any message for the specified amount of time.
verilocation
@verilocation
Oct 14 2016 12:50
Looking through that article... The first image in "Need response? Use Forward + Tell back" is exactly what I am doing, and I could replace it with the Forward and Tell back..but how would I actually do the final Tell such that the original actor, A in this case, can receive it and know its a response to its original request?
Arsene Tochemey GANDOTE
@Tochemey
Oct 14 2016 12:51
By default if you follow very well the tutos forward carries the original sender
Andrey Leskov
@andreyleskov
Oct 14 2016 13:10
@Horusiath I suspect some unhandled exception from ActorSystem internals, persist, for example. Is their any article about Akka.net logging internals? Need to be sure I'm not loosing any error from Akka
Damian Reeves
@DamianReeves
Oct 14 2016 13:11
Can you think of any reason why adding a 3rd node to a cluster always results in the other non-seed node going down? Roles of the three nodes are : seed, demo, manager (so they all have different roles).
zeus82
@zeus82
Oct 14 2016 13:13
Has anyone had a chance to look at this question on stackoverflow: https://stackoverflow.com/questions/40026641/akka-net-configure-router-in-hocon-with-path-wildcards
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 13:21
@zeus82 the easiest way would be to check by yourself ;) I think, you should be able to do so
zeus82
@zeus82
Oct 14 2016 13:22
@Horusiath So don't use "FromConfig.Instance" ?
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 13:22
@andreyleskov all exceptions thrown in akka are usually logged on error level. Messages that didn't reach their targets, are by default published on dead letters event bus, where you can subscribe to get them (they are also logged on Debug level)
@zeus82 I think, that if you want to have a dynamic parameter, there is no reason to use configuration at this point. You can start router config manually, and pass all parameters back there
@DamianReeves maybe they have some different dependencies (like using different version of the serializer or something like that)
Daniel D'Agostino
@dandago2_twitter
Oct 14 2016 13:25
hey guys what is the proper way to extrapolate entity-per-child on the cluster? Use distributed consistent hashing with some kind of dictionary to maintain state per id?
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 13:26
@dandago2_twitter try Akka.Cluster.Sharding. Consistent hashing is almost for sure not what you're looking for
zeus82
@zeus82
Oct 14 2016 13:26
@Horusiath Ok, I think I get what you are saying, I just have a router config in a "static" place in my HOCON and use that, which means I wouldn't be able to use the FromConfig.Instance, which is OK, I really just want that setting in my config file
Damian Reeves
@DamianReeves
Oct 14 2016 13:29
The thing is if I have Seed-Node and Demo-Node up... adding Manager-Node causes Demo-Node to becume unreachable ... if I have Seed-Node and Manager-Node adding Demo-Node causes Manager-Node to become unreachable... they all are using Wire
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 13:53
@DamianReeves any errors?
Damian Reeves
@DamianReeves
Oct 14 2016 13:57
I immediately get AssociationError and the underlying reason is InvalidAddress
Damian Reeves
@DamianReeves
Oct 14 2016 14:08
Here's an excerpt from the logs of one of the nodes:
2016-10-14 10:03:09.491 -04:00 [Information] Configuration Result:
"[Success] Name Aimee-ClusterManager, [Success] DisplayName Aimee Cluster Manager, [Success] Description Aimee Cluster Manager, [Success] ServiceName Aimee-ClusterManager"
2016-10-14 10:03:09.510 -04:00 [Information] "Topshelf" v"4.0.0.0", .NET Framework v"4.0.30319.42000"
2016-10-14 10:03:10.650 -04:00 [Information] "Starting remoting"
2016-10-14 10:03:11.145 -04:00 [Information] Remoting started; listening on addresses : ["akka.tcp://aimee@0.0.0.0:28748"]
2016-10-14 10:03:11.148 -04:00 [Information] "Remoting now listens on addresses: [akka.tcp://aimee@0.0.0.0:28748]"
2016-10-14 10:03:11.243 -04:00 [Information] Cluster Node ["akka.tcp://aimee@0.0.0.0:28748"] - "Starting up..."
2016-10-14 10:03:11.293 -04:00 [Information] Cluster Node ["akka.tcp://aimee@0.0.0.0:28748"] - "Started up successfully"
2016-10-14 10:03:11.300 -04:00 [Information] The "Aimee-ClusterManager" service is now running, press Control+C to exit.
2016-10-14 10:03:12.392 -04:00 [Information] Welcome from ["akka.tcp://aimee@127.0.0.1:4053"]
2016-10-14 10:03:13.384 -04:00 [Warning] "AssociationError [akka.tcp://aimee@0.0.0.0:28748] -> akka.tcp://aimee@0.0.0.0:28755: Error [Invalid address: akka.tcp://aimee@0.0.0.0:28755] []"
2016-10-14 10:03:13.397 -04:00 [Warning] Tried to associate with unreachable remote address ["akka.tcp://aimee@0.0.0.0:28755"]. Address is now gated for 5000 ms, all messages to this address will be delivered to dead letters. Reason: ["Invalid address: akka.tcp://aimee@0.0.0.0:28755"] "Caused by: [Akka.Remote.Transport.InvalidAssociationException: Association failure ---> Helios.Exceptions.HeliosConnectionException: failed as a result of System.AggregateException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> Helios.Channels.ConnectException: LogError connecting to 0.0.0.0:28755 ---> System.Net.Sockets.SocketException: The requested address is not valid in its context
   at Helios.Channels.Sockets.SocketChannelAsyncOperation.Validate()
   at Helios.Channels.Sockets.TcpSocketChannel.DoFinishConnect(SocketChannelAsyncOperation operation)
   at Helios.Channels.Sockets.AbstractSocketChannel.AbstractSocketUnsafe.FinishConnect(SocketChannelAsyncOperation operation)
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Helios.Channels.Bootstrap.ClientBootstrap.<DoResolveAndConnect>d__15.MoveNext()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at Akka.Remote.Transport.Helios.HeliosTcpTransport.<>c.<AssociateInternal>b__1_0(Task`1 tr)
   at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
   --- End of inner exception stack trace ---
---> (Inner Exception #0) System.AggregateException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> Helios.Channels.ConnectException: LogError connecting to 0.0.0.0:28755 ---> System.Net.Sockets.SocketException: The requested address is not valid in its context
   at Helios.Channels.Sockets.SocketChannelAsyncOperation.Validate()
   at Helios.Channels.Sockets.TcpSocketChannel.DoFinishConnect(SocketChannelAsyncOperation operation)
   --- End of inner exception stack trace ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
---> (Inner Exception
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 15:19
@DamianReeves looks like a problem within Helios - all I've seen on the net is to change IP address used... to IPAddress.Any (which is 0.0.0.0 ;) ). However you may try to change it to something else. Also @Aaronontheweb should know more.
Damian Reeves
@DamianReeves
Oct 14 2016 15:21
in my configs I am using 0.0.0.0. Hopefully @Aaronontheweb can help me figure it out
Interesting... let me check if WebCrawler uses 0.0.0.0 or 127.0.0.1
It uses 127.0.0.1, gonna try changing all my configs to explicit 127.0.0.1 instead of 0.0.0.0
Damian Reeves
@DamianReeves
Oct 14 2016 15:31
:smile: the 0.0.0.0 addresses in my config were the problem, thanks for the hint @Horusiath
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 15:31
np :)
Andrew Young
@ayoung
Oct 14 2016 16:06
@Horusiath can you explain a little more about what you said about you "never seen real use case scenario for consistent hash pool "?
verilocation
@verilocation
Oct 14 2016 16:28

Sorry to bother you all again, I managed to get routing + cluster + remote deployment working fine. But I need to extend it so that my cluster also has access to a cluster.. When I do this im getting the following exception

Configuration missing for router [akka://Bifrost/remote/akka.tcp/Bifrost@192.168.0.121:56945/user/processor/c1/geocode] in 'akka.actor.deployment' section.

The GeocodeActor cluster is created within ProcessorActor so the path looks correct, but I'm not sure why its complaining as my config looks like this:

actor {
  provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
  ask-timeout = 30s

  deployment {
    /processor {
      router = smallest-mailbox-pool
      routees.paths = ["/user/processor"]
      nr-of-instances = 50
      cluster {
                enabled = on
                max-nr-of-instances-per-node = 50 # want less than this in production to ensure it spans multiple nodes
                allow-local-routees = off
                use-role = processor
            }
    }

    "/processor/*/geocode" {
      router = smallest-mailbox-pool
      nr-of-instances = 50
      cluster {
                enabled = on
                max-nr-of-instances-per-node = 50 # want less than this in production to ensure it spans multiple nodes
                allow-local-routees = off
                use-role = geocode
            }
    }
  }
}
In my processor actor, I create the geocode actor system like so
this.GeocodeActor = ReceiveActor.Context.ActorOf(Props.Create<GeocodeActor>().WithRouter(FromConfig.Instance), "geocode");
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 16:42
@ayoung around 90% of the time people want to use consistent hash pool, what they really want is to send a message to a particular actor identified by some key, no matter where it lives in the cluster (optionally creating it if it hasn't exsist yet). And that's not what consistent hashing does.
Andrew Young
@ayoung
Oct 14 2016 16:43
ok. that is precisely what i'm trying to do. what is the correct pattern for this then?
Andrew Young
@ayoung
Oct 14 2016 16:45
nice :) i'll get back to you in a week.
@Horusiath is the sharding module still in beta?
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 16:48
yes
it can be used already (I don't expect the API to change significantly)
Andrew Young
@ayoung
Oct 14 2016 16:51
if we look at the Web Crawler example, it is sending a message to an actor identified by some key but it is not using sharding. would that project be a candidate for sharding as well?
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 16:52
it could, but sharding brings more complexity (i.e. it requires globally accessible persistent backend to work)
Andrew Young
@ayoung
Oct 14 2016 16:55
that complexity is something i don't want to bring in at the moment. the child actors are pretty stateless.
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 17:26
@ayoung if your actor's are stateless, then maybe consistent hashing will be valid option - the major trait, people forget about is that in consistent hashing router, routees are not created per id, but per range of IDs i.e. if your key space (so max range of all possible keys, you're going to use) is 1-1000 and you have 4 routees, then 1st routee will handle keys from 1-250, 2nd from 251-500 etc. You also need to keep in mind, that router resizing will change those ranges: so if you change routees count from 4 to 5, 1st will now handle keys from 1-200, 2nd from 201-400 etc.
this is why consistent hash routing is bad for statefull actors
Andrew Young
@ayoung
Oct 14 2016 18:02
ok thank you, @Horusiath. yes. i have a strategy for handling the rebalancing an an message-order-guaranteed way. a separate question is with clustering: when all the nodes in a cluster role is down, how do I ensure message reliability in this scenario? Is there a way to discover or get notified of this case, perhaps through the Gossip events?
i want to stop sending messages if no nodes in the role are available.
Bartosz Sypytkowski
@Horusiath
Oct 14 2016 18:24

@ayoung first place to go is Cluster.Get(actorSystem).State which contains the latest known state of the cluster (from the point of view of current node). It contains info about all members, their roles and reachability.

You can also subscribe to cluster events by Cluster.Get(Context.System).Subscribe(Self, new[] { typeof(ClusterEvent.IMemberEvent) }); (remember to unsubscribe when actor stops). From there you'll be notified about events such as:

  • MemberUp (when new node has successfully connected to the cluster)
  • MemberDown (when node has been removed from the cluster).

There are also ClusterEvent.IReachabilityEvent you can subscribe to:

  • UnreachableMember (when node has been disconnected but not yet kicked out of the cluster)
  • ReachableMember (when node is available again)

Each of those events has Member property with address of the node and list of it's roles. You can use them to react when those events will occur.

Gregorius Soedharmo
@Arkatufus
Oct 14 2016 18:31
for an authentication scheme, is it ok to store all of the user data in each separate actors(persistence), or is it still better to use the old database approach? is the actor approach an overkill?
that is separate actors per user id
Damian Reeves
@DamianReeves
Oct 14 2016 18:55

What is the proper way to shutdown the ActorSystem when using clustering. ActorSystem.Terminate() does not seem to wait for the node to be gracefully shut down:

Do I need to subscribe to cluster events and wait until I've been notified that I've been removed and then call System.Terminate()?

Andrew Young
@ayoung
Oct 14 2016 18:57
@DamianReeves this is pretty much what i went with http://stackoverflow.com/a/38325349/436361
Damian Reeves
@DamianReeves
Oct 14 2016 19:00
thanks
Damian Reeves
@DamianReeves
Oct 14 2016 19:27
Is the plan that we have to wait for 1.5 for wire serializer to come out of beta?
Marc Piechura
@marcpiechura
Oct 14 2016 19:29
@DamianReeves Wire has its own release cycle and is independent from Akka.net, for 1.5 we have planed to replace json.net as default serializer with Wire
So it should be out of beta before 1.5 ;)
Damian Reeves
@DamianReeves
Oct 14 2016 19:30
ok cool
Gregorius Soedharmo
@Arkatufus
Oct 14 2016 19:57
if i'm using Ask, is it ok if the message get passed to another actor first before it is passed back to the original Ask-er?
Marc Piechura
@marcpiechura
Oct 14 2016 19:59
Only if you keep the original sender via Forward or Tell(msg, Sender)
Gregorius Soedharmo
@Arkatufus
Oct 14 2016 19:59
ie. [Ask from nancy module] ==> [Actor A Tell with IActorRef to Ask] ==> [Actor B Tell back to Ask]
@Silv3rcircl3 thanks
Gregorius Soedharmo
@Arkatufus
Oct 14 2016 20:04
oh, i didn't know you can do Tell(msg, Sender)... cool, thanks
Andrew Young
@ayoung
Oct 14 2016 21:03
if there are no routees available on a clustered consistent hash router, any messages that get sent just disappear. they don't even make it to the deadletters. is this the proper behavior?
Nahuel Greco
@nahuel
Oct 14 2016 23:04
coming from Erlang, I want to know what are the options to run Akka.Net on Linux using F#. Can you use dotnet-core? Or you must use mono?