Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • 16:08
    IgorFedchenko commented #4085
  • 15:50
    Aaronontheweb assigned #4085
  • 15:50
    Aaronontheweb labeled #4085
  • 15:50
    Aaronontheweb labeled #4085
  • 15:49
    Aaronontheweb closed #4032
  • 14:58
    IgorFedchenko commented #4032
  • 14:57
    IgorFedchenko opened #4085
  • Dec 05 17:21
    Aaronontheweb synchronize #4079
  • Dec 05 17:20
    Aaronontheweb labeled #4084
  • Dec 05 17:20
    Aaronontheweb labeled #4084
  • Dec 05 17:20
    Aaronontheweb milestoned #4084
  • Dec 05 17:20

    Aaronontheweb on dev

    Remove string interpolation fro… (compare)

  • Dec 05 17:20
    Aaronontheweb closed #4084
  • Dec 05 17:20
    Aaronontheweb commented #4084
  • Dec 05 15:43
    ismaelhamed opened #4084
  • Dec 04 23:34

    Aaronontheweb on dev

    Made cleanup call thread-safe (… (compare)

  • Dec 04 23:34
    Aaronontheweb closed #4081
  • Dec 04 23:34
    Aaronontheweb closed #4020
  • Dec 04 19:08
    Aaronontheweb commented #4079
  • Dec 04 18:35
    maratoss review_requested #4079
Bartosz Sypytkowski
@Horusiath
@vladmir-boy what do you mean by new transport?
Vladimir Boiarkin
@vladmir-boy
we implemented gRPC remote transport instead of dotNetty
Bartosz Sypytkowski
@Horusiath
dotnetty is using TCP layer, gRPC is build on top of HTTP 2 (which is build on top of TCP). So no, nodes using two different transports will not be able to communicated with each other - different binary formats.
If you'd replace dotnetty with another TCP implementation, it would be possible
Vladimir Boiarkin
@vladmir-boy
@Horusiath thanks! is there away to plug translator from one binary format to another somewhere ?
Bartosz Sypytkowski
@Horusiath
@vladmir-boy yes it's possible, but I wouldn't assume it's an easy task. I think, you should be able to get all necessary documentation here: https://getakka.net/articles/remoting/transports.html#using-custom-transports
Pedro Yan Ornelas de Oliveira
@pedroyan
Hi everyone! Noob question here: How can I log all uncaught exceptions thrown on a certain actor? I know I can override the PreRestart() method and log the exception there, but that wouldn't log exceptions that result on the actor stopping
Bartosz Sypytkowski
@Horusiath
@pedroyan all exceptions thrown in actors are logged by default
Felipe Muniz
@Mun1z
Anyone using the solution on online game servers? I met the actor model a short time ago, I'm studying to see if it's worth including it in my case.
Zetanova
@Zetanova
@Mun1z Most likely yes, but it depends of the game. The main benefit will be that there will be no locks (synchronisation) for user-states and world interactions. Clients would be served as fast as possible. But if your game-server/client can handle everything in a single message loop on 3Ghz, i want border that much to replace it with actor model.
HermansG
@HermansG
Probably a trivial question but I forgot the answer. Suppose in the mailbox of an actor we have messages m0 .. m5 all different object types.
m0 is delivered first and the state of the actor changes to a state that only has a Receive defined for the type of m5.
I forgot what happens to the messages m1..m4. Are they kept in the mailbox or are they sent to the actor and not processed?
Arjen Smits
@Danthar
They are processed and you receive warnings.
Zetanova
@Zetanova
@HermansG Every message is picked from the mailbox and get processed in order. If u want to postpone messages, you will need to resend it to the current actor again
Context.Self.Tell(msg, Context.Sender);
or stash it with IWithUnboundedStash and Stash.Stash(); and after Stash.UnstashAll();
HermansG
@HermansG
@Danthar "They are processed" but in Unhandled aren't they, because there is no Receive.
HermansG
@HermansG
@Zetanova that scenario for me is perhaps too advanced but thank you
Arjen Smits
@Danthar
Hermansg yes you get an unhandeld message. And yes the stashing is a way to handle this. It's very easy to apply. Check out the docs for more info 😊
Dan
@ctrlaltdan

Hey I have a question about event adapters and their support across persistence plugins. In short, I am trying to use an event adapter to serialise protobuf-net dtos using InMemory, Sql and Mongodb (through cosmosdb/documentdb emulator engine). I'm unsure if my event adapter implementation is incorrect or if there is a problem with the compatibility among different persistence drivers.

I have put together a solution with each of the three mechanisms (with tests) here:
https://github.com/ctrlaltdan/akka-event-adapters

Any help would be appreciated :D

Zetanova
@Zetanova
@ctrlaltdan ""System.Byte[], System.Private.CoreLib"" = protobuf looks strange, your code is only handle known and attributed/tagged types
Zetanova
@Zetanova
i am not sure, but what i think is happening that you serialize DtoA to byte[]+manifest
and after the persistent system passes byte[] again to the eventadapter and u are returing byte[]+String.Empty
on loading, you will get byte[]+string.empty again back
just remove ""System.Byte[], System.Private.CoreLib"" = protobuf
I have an other question and i fought that i resolved it, I have in a k8s cluster 3 seed nodes
i am using static-quorum of size 2 as split blrain resolver
Zetanova
@Zetanova
i had the problem that on an rollingupdate of the seed-nodes and a static seed node list, the first node (node0) always joint itself and build a new cluster, but node1 and node2 where up and still had the valid old cluster.
To resolve this problem, i changed the seed-node list on each seed node, so it's own entry is at the end of the list
Node0 => node1,node2,node2
Node1 => node0,node2,node1
Node2 => node0,node1,node2
It was fine for a while
But now node0 restarted on some point in the last days and joined itself again and formed a new cluster
I rested it, 5 times and always it joint itself instantly and formed a new cluster
Dan
@ctrlaltdan

@Zetanova Thanks for you reply. I tried to remove the system.byte[] from the hocon but (using mongodb) I still get the same error... System.TypeLoadException: Could not load type 'SLAP_V1' from assembly 'Akka.Persistence.MongoDb, Version=1.3.12.0, Culture=neutral, PublicKeyToken=null'.

It would seem that mongodb honours the manifest property and tries to deserialize the string (which it wont be able to do) whereas the sql plugin doesnt honour the manifest, equally causing problems.... Any thoughts?

I could wrap my contracts in another contract which achieves the same but I was trying to both interact natively with the framework and minify my message contracts (to make most of the cosmosdb 1kb=1RU costing model)
Zetanova
@Zetanova
the Sql plugin i know very well, it selfs the manifest string into a column and the payload in a blob column
I guess this answers one question...
Manifest NVARCHAR(500) NOT NULL,
Payload VARBINARY(MAX) NOT NULL,
so not clear if it supports it or not
Dan
@ctrlaltdan

https://github.com/AkkaNetContrib/Akka.Persistence.MongoDB/blob/754c1370f1e7381dd602ae84f1f65cd6fe2b2b2b/src/Akka.Persistence.MongoDb/Journal/MongoDbJournal.cs#L72

And it looks like the mongodb implementation treats the manifest property and the stored type property interchangeably. This wouldnt work with my denormalised "contract name" dto style unless I wrote my own serializer I guess?

Zetanova
@Zetanova
@ctrlaltdan would not use protobuf for long time storage in the first place
Anathema
@BitterAmethyst_twitter
Is there a way to get broken connections to resume transparently? We have an issue where some AV process (IT wont let us disable it...) is causing some connections to be aborted. I'd like them to reconnect and have messages sent while the connection is broken to be buffered until the connection resumes and then resent. Is this possible? I guess it will be difficult since we keep some IActorRefs inside some actors. Our system involves a server process and multiple client processes that all exist on the same physical machine (this is required due to some native interop we do).
Bartosz Sypytkowski
@Horusiath

@BitterAmethyst_twitter default transport layer doesn't cover user-level messages resending (the only resends there are TCP-level package retransmissions). This is for performance reasons and because all communication patterns (including retransmissions) can be composed from simple fire-and-forget message channels.

If you need to resent messages after figuring out the transport issues, you can use something like:

  1. Implement your own resend logic eg. have a list of messages waiting for confirmation, when sending a message, put it on confirmationPending list, and after getting ACK message remove it from there. Additionally add something like periodic Context.System.Scheduler tick to periodically resend all messages from pending list.
  2. AtLeastOnceDeliveryActor from Akka.Persistence. It works more or less like example from above, but adds persistence layer to it and all speed-reduction and complexity coming with it.
  3. Escalate resend responsibility upstream - another option could be i.e. putting a message queue between your actor system and consumer or just go straight to consumer app and implement resends there.

All options require sending some sort of response or ACK message and some form of detecting duplicate messages.

Anathema
@BitterAmethyst_twitter
@Horusiath thanks
Popov Sergei
@F0b0s
Hi there. Does anyone has experience in integration akka .net and MassTransit(RabbitMQ transport)? I would like to schedule some messages in actor and send event with MassTransit.
Zetanova
@Zetanova
A router needs paths and a role to send to routees a messages. Is it possible to send a message to multiple routees by role only over an akka-path? I am searching for some feature to express a group router inside an actorpath. A remote nodeA should send a broadcast message by roleName, but the group router should not be statically defined on this remote nodeA.
Zetanova
@Zetanova
Just to send simply the RouterProps to the remote nodeA ?
Zetanova
@Zetanova
would be something like ActorSelection("akka.router://routerType@roleName/user/parent/child").Tell(msg); possible?
Ebere Abanonu
@eaba
@F0b0s check out my repo: https://github.com/eaba/Hostel