Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • 17:57
    valdisz synchronize #3904
  • 12:27
    valdisz synchronize #3904
  • 11:43
    cptjazz commented #3925
  • 11:40
    cptjazz synchronize #3925
  • 11:02
    valdisz edited #3904
  • 10:55
    Aaronontheweb synchronize #3926
  • 10:45
    Aaronontheweb opened #3927
  • 10:01
    valdisz synchronize #3904
  • 06:22
    cptjazz commented #3925
  • Sep 21 19:33
    Aaronontheweb opened #3926
  • Sep 21 16:19
    valdisz synchronize #3904
  • Sep 21 14:58
    Aaronontheweb synchronize #3924
  • Sep 21 14:58
    Aaronontheweb commented #3922
  • Sep 21 14:45
    valdisz synchronize #3904
  • Sep 21 14:43
    valdisz synchronize #3904
  • Sep 21 14:35
    Aaronontheweb commented #3925
  • Sep 21 09:51
    cptjazz opened #3925
  • Sep 21 09:11
    cptjazz opened #3924
  • Sep 20 23:30

    Aaronontheweb on dev

    added ability to support custom… (compare)

  • Sep 20 23:30
    Aaronontheweb closed #3923
Wuttipat
@PlanCZero
Hi. I'm wondering how to check that all chaild actor has done their jobs? Please advise.
I'm using akka.net in c#
Peter Bergman
@peter-bannerflow
@PlanCZero I think it depends on what a job is to your application and when it is considered as done. But perhaps you could have the child report that work is done to its parent. Then the parent could keep track of this.
Bartosz Sypytkowski
@Horusiath
@PlanCZero you may want to take a look at the Aggregator pattern
Wuttipat
@PlanCZero
@peter-bannerflow @Horusiath Thank you for advise. I think Aggregator pattern is what I'm looking for but I'm not sure. I'm newby in akka.
I found some question on StackOverflow, but don't know how to write it in csharp.
Francis Paulin
@paulinfrancis

If I have a system that looks like this:

ASP .NET with lightweight actor system to talk with SignalR

  • Get remote IActorRef to Actor1 using ActorSelection

Windows Service to do the bulk of the work, and keep state

  • Actor 1, Tells Actor 2
    • Actor 2 tells Sender (Actor 1) when it has finished doing its thing
  • Actor 1 would now like Tell the actor in the ASP .NET app. What is the best way to get an IActorRef to Tell to? It seems strange to use ActorSelection in both ends, but that is maybe the only option?
Bartosz Sypytkowski
@Horusiath
@paulinfrancis
  • in general using actor selection is usually bad (as it's slower and you don't even know if selected actor is alive). It's better to retrieve IActorRef from actor selection by using either ResolveOne method or by sending Identify request to actor selection and await for ActorIdentity response.
  • depending on your needs you don't always need to call sender back. I've written a blog post, where I described how to make immediate response to initial caller.
  • if for some reason you need to send response to Actor 1 to continue processing, you can always "remember" original sender or carry it as part of the message (IActorRef can be serialized and deserialized within actor system boundaries)
Francis Paulin
@paulinfrancis
Thanks!
Francis Paulin
@paulinfrancis

Output from service
[INFO][13.10.2016 11:06:30][Thread 0001][remoting] Remoting now listens on addresses: [akka.tcp://SimulatorSystem@127.0.0.1:8091]
[DEBUG][13.10.2016 11:06:31][Thread 0008][akka://SimulatorSystem/user] now supervising akka://SimulatorSystem/user/Simulator

In the startup of my ASP .NET client actor system:
ActorReferences.Simulator = _actorSystem.ActorSelection("akka.tcp://SimulatorSystem@127.0.0.1:8091/user/Simulator")
.ResolveOne(TimeSpan.FromSeconds(3))
.Result;

Throws:
{"Exception occurred while resolving ActorSelection"}
InnerException: {"subject was null"}

Any quick ideas as to what I might be missing? I have installed Akka.Remote in both projects, and set up hocon to enable remoting in both too.

Bartosz Sypytkowski
@Horusiath
on which end does that exception occur?
Francis Paulin
@paulinfrancis
my ASP .NET client
_actorSystem.ActorSelection(...
Bartosz Sypytkowski
@Horusiath
did you set up this Simulator actor before sending ResolveOne request?
"subject was null" suggests that both ends (both actor systems) have connected successfully, but the one that received the identification request, couldn't find an actor under provided path
Francis Paulin
@paulinfrancis
yes, it's a topshelf service that I have started (as a console app, without installing the service, for simplicity), and I make sure I see the output indicates that the actor has successfully started before I launch the web app
Bartosz Sypytkowski
@Horusiath
@Aaronontheweb any ideas?
Francis Paulin
@paulinfrancis
It's probably worth mentioning that I'm using ASP .NET Core, but targeting 4.6.1. The project does have a web.config, and I was under the impression that it should be possible to use it for hocon, in parallel with the presence of project.json.
Bartosz Sypytkowski
@Horusiath
I know that akka.remote is not yet compatible with .net core
Francis Paulin
@paulinfrancis
Should it not be OK though, when using the full framework?
Bartosz Sypytkowski
@Horusiath
I don't know
Arsene T. Gandote
@Tochemey
Hello Guys can someone show how to define PreStart and PostStop in F# API
Damian Reeves
@DamianReeves
@paulinfrancis try loading your Hocon by another means... I believe in ASP.NET core web.config is only involved in IIS invocation not in application lifecycle
Vagif Abilov
@object
@Tochemey F# API doesn't have one-to-one match with C# API, actors in F# are functions, not types, so there are no such overrdes like PreStart and PostStop. If you need to execute some code before actor starts processing messages, just place it in the beginning of the function, prior to the recursive message handler function. And for PostStop you can use mailbox.Defer() and pass it a list of deferrables (disposables) that need to be executed when actor stops.
Francis Paulin
@paulinfrancis
@DamianReeves Great success!
var config = ConfigurationFactory.ParseString(@"
    akka {
        loglevel = DEBUG

        actor {
            provider = ""Akka.Remote.RemoteActorRefProvider, Akka.Remote""
            debug {
                receive = on
                autoreceive = on
                lifecycle = on
                event-stream = on
                unhandled = on
            }
        }

        remote {
            helios.tcp {
                transport-class = ""Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote""
                transport-protocol = tcp
                port = 0
                hostname = ""127.0.0.1""
            }
        }
    }");

_actorSystem = ActorSystem.Create("SimulatorSystem", config);
I'll move the config to appsettings.json now, but good to see remoting works with ASP .NET Core targeting full framework :)
Damian Reeves
@DamianReeves
:thumbsup:
There's a part of me that really wants to build a Microsoft.Extensions.Configuration extension for HOCON. What is the status of HOCON outside of the Akka.NET repo, is https://github.com/akkadotnet/HOCON/commits/master still a thing being worked on?
Andrew Buttigieg
@andrewbuttigieg
in http://getakka.net/docs/clustering/cluster-client, how do I get a reference to ClusterReceptionist please?
ignore, you need to add Akka.Cluster.Tools via nuget.
verilocation
@verilocation
Quick question... I have a cluster which deploys geocode actors that will perform geocodes against Google. This is all great BUT google only lets us do 50requests a second. Is there any way I can communicate efficiently between the actors to figure out how many requests have been made per second and to throttle accordingly?
verilocation
@verilocation
Also.. is there an Akka.net equivalent of this? It'd be really nice to be able to see throughput and such
verilocation
@verilocation
Also.. in the examples when addressing a clustered router we ask for the routees and check there are any before continuing... this seems like it could be a performance issue.. is this the recommended pre-check?
var routees = await this.GeocodeActor.Ask<Routees>(new GetRoutees());
if (routees.Members.Any()) { /* Do things */ }
Arjen Smits
@Danthar
@verilocation i think the webcrawler sample has something like that for communicating with the github api. (request throttling)
you might want to look there
verilocation
@verilocation
@Danthar Hey, thanks, I cant seem to find any mention of throttling or github within that project, any pointers as to where or what to look for?
Daniel D'Agostino
@dandago2_twitter
Creating a child actor via ActorOf() and Props is a bit of a pain since it takes params object[], which means technically you can pass anything, and you need to make sure you're passing in the right dependencies, or you'll have runtime issues. Is there a clean way to instantiate actors that guarantees compile-time safety?
Damian Reeves
@DamianReeves
I have a worker executable that I want to do work and shutdown: Is it a bad ID for that worker to join my cluster?
Garrard Kitchen
@garrardkitchen
Hi @corneliutusnea, were you ever able to form cluster with web app in Azure App Services? I've put the seed in a webjob to run continuously and deploy both webjob and web app in same place (deployed via vsts) and both are running but unfortunately they are not seeing each other. akka messages show no errors (thanks to @andreyleskov). I can see both are running on diff w3wp.exe's. I'm using localhost as hostname on both [webjob + web app] and diff ports.
Damian Reeves
@DamianReeves
How do I gracefully leave a cluster when my actor system is terminating?
Francis Paulin
@paulinfrancis

I need to send a largish object with remoting, and an Akka.Remote.OversizedPayloadException is thrown:

Akka.Remote.OversizedPayloadException: Discarding oversized payload sent to [akka.tcp://SimulatorSystem@127.0.0.1:20228/]: max allowed size 128000 bytes, actual size of encoded PPSim.ActorModel.Messages.DiagramLoadedMessage was 723509 bytes.

I've tried setting maximum-frame-size = 4000000b (arbitrary number substantially larger than my message) in both ends:

remote {
    helios.tcp {
        transport-class = ""Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote""
        transport-protocol = tcp
        port = 0
        hostname = ""127.0.0.1""
        maximum-frame-size = 4000000b
    }
}
Are there other settings I need to set to enable larger messages?
Bartosz Sypytkowski
@Horusiath
@paulinfrancis sending 700MB message is definitely not a good idea
Francis Paulin
@paulinfrancis
Shouldn't that be 0.723MB?
Arjen Smits
@Danthar
@verilocation ah sorry, i was wrong its not in that project. I distinctly remember it being in some sample project. Let me check
Arjen Smits
@Danthar
@verilocation Cant seem to find what i was looking for. I thought the sample stuff in the bootcamp for communicating with github had some throttling. And it has, but its to basic.
However there are various way you can throttle with Akka. One pattern is described here: http://letitcrash.com/post/28901663062/throttling-messages-in-akka-2 its from the JVM version. but the same principle applies. And should be fairly easy to port to .net.