Akka.net: Improve cluster interoperability between .NET Full and .NET Core versions of Akka

Created on 24 Dec 2017  路  6Comments  路  Source: akkadotnet/akka.net

I was able to make cluster on .NET Core talk to .NET Full and vice versa by doing a small hack.

I created a custom serialization binder for JSON.NET that replaces mscorlib for System.Private.CoreLib and vice versa: https://gist.github.com/nvivo/8665a7c984a2f0382851ffe3cbe6aa36

This works because all my messages only uses basic types from mscorlib like primitives, lists, ienumerables, etc and they're available in both. But at the same time I feel it's a lot of copy/paste and it is working, but it will be a pain to maintain.

I'd like to propose 2 extension points that would help alleviate this problem:

  1. Allow some control during serialization, by allowing us to replace TypeExtensions.TypeQualifiedName somehow. Both .NET Core and Full allow to load core types using just the name without assembly, so sending System.String instead of System.String, mscorlib could both ways work.

  2. Allow some way to set the SerializationBinder on json.net, so we can add just the binder and control de deserialization like I did.

I know both these methods are quite internal behavior, but simply allowing these extension points would be enough to have a working environment for most people. I for one have a scenario where due to third party dependencies, I'll have to support .NET Full for a long time while running most of my cluster on linux with .net core.

I could do a PR, but would like some opinion on this idea before any changes.

Most helpful comment

Just a note, I'm currently running a 130 node production cluster, 60 of them on .NET core and the rest on net47 with this code. No surprises so far.

All 6 comments

Same problem on Wire (Hyperion) https://github.com/rogeralsing/Wire/issues/145

We're also considering moving slowly our services to .NET Core, however, it would be great, if we could keep Akka.NET as the integration layer between them (and not downgrading to REST). If it is absolutely not a viable option due to technical reasons, then I think it would be beneficial to the community to know outright that it will never happen.

Just a note, I'm currently running a 130 node production cluster, 60 of them on .NET core and the rest on net47 with this code. No surprises so far.

Thats pretty cool @nvivo. Would love to see a blog post someday on how your managing + deploying your nodes.

This will be useful in enterprise scenarios.

Now I have node envy. We only have 15 lol

Was this page helpful?
0 / 5 - 0 ratings

Related issues

mariosangiorgio picture mariosangiorgio  路  3Comments

atrauzzi picture atrauzzi  路  6Comments

IgorFedchenko picture IgorFedchenko  路  6Comments

Aaronontheweb picture Aaronontheweb  路  6Comments

AndrewBoklashko picture AndrewBoklashko  路  3Comments