Last active
July 12, 2016 07:46
-
-
Save ZoolWay/8092e7c2aa3a86b009981885cd4aa271 to your computer and use it in GitHub Desktop.
Very basic console-based Akka.NET cluster seed node and worker node
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// .... | |
[assembly: log4net.Config.XmlConfigurator()] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<packages> | |
<package id="Akka" version="1.1.0" targetFramework="net461" /> | |
<package id="Akka.Cluster" version="1.1.0" targetFramework="net461" /> | |
<package id="Akka.Logger.log4net" version="1.0.8" targetFramework="net461" /> | |
<package id="Akka.Remote" version="1.1.0" targetFramework="net461" /> | |
<package id="Akka.Serialization.Wire" version="1.1.0.26-beta" targetFramework="net461" /> | |
<package id="Google.ProtocolBuffers" version="2.4.1.555" targetFramework="net461" /> | |
<package id="Helios" version="2.1.1" targetFramework="net461" /> | |
<package id="log4net" version="2.0.5" targetFramework="net461" /> | |
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" /> | |
<package id="System.Collections.Immutable" version="1.2.0" targetFramework="net461" /> | |
<package id="Wire" version="0.0.6" targetFramework="net461" /> | |
</packages> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<configuration> | |
<configSections> | |
<section name="akka" type="Akka.Configuration.Hocon.AkkaConfigurationSection, Akka" /> | |
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> | |
</configSections> | |
<log4net> | |
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> | |
<mapping> | |
<level value="ERROR" /> | |
<foreColor value="Red, HighIntensity" /> | |
</mapping> | |
<mapping> | |
<level value="WARN" /> | |
<foreColor value="Yellow" /> | |
</mapping> | |
<mapping> | |
<level value="INFO" /> | |
<foreColor value="White, HighIntensity" /> | |
</mapping> | |
<mapping> | |
<level value="DEBUG" /> | |
<foreColor value="White" /> | |
</mapping> | |
<layout type="log4net.Layout.PatternLayout"> | |
<conversionPattern value="%5level %date{HH:mm:ss} [%2thread] %30.30logger - %message%newline" /> | |
</layout> | |
</appender> | |
<root> | |
<level value="DEBUG" /> | |
<appender-ref ref="ColoredConsoleAppender" /> | |
</root> | |
</log4net> | |
<akka> | |
<hocon> | |
<![CDATA[ | |
akka { | |
actor { | |
provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster" | |
serializers { | |
wire = "Akka.Serialization.WireSerializer, Akka.Serialization.Wire" | |
} | |
serialization-bindings { | |
"System.Object" = wire | |
} | |
} | |
remote { | |
helios.tcp { | |
transport-class = "Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote" | |
applied-adapters = [] | |
transport-protocol = tcp | |
hostname = "127.0.0.1" | |
port = 0 | |
} | |
} | |
loggers = ["Akka.Logger.log4net.Log4NetLogger,Akka.Logger.log4net"] | |
cluster { | |
seed-nodes = ["akka.tcp://sample@127.0.0.1:7001"] | |
roles = [node1] | |
} | |
} | |
]]> | |
</hocon> | |
</akka> | |
<startup> | |
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> | |
</startup> | |
<runtime> | |
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | |
<dependentAssembly> | |
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> | |
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /> | |
</dependentAssembly> | |
<dependentAssembly> | |
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> | |
<bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.2.0.0" /> | |
</dependentAssembly> | |
</assemblyBinding> | |
</runtime> | |
</configuration> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Threading; | |
using Akka.Actor; | |
namespace ClusterSeedNode | |
{ | |
class Program | |
{ | |
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName); | |
private static readonly ManualResetEvent quitEvent = new ManualResetEvent(false); | |
private static readonly ManualResetEvent asTerminatedEvent = new ManualResetEvent(false); | |
static void Main(string[] args) | |
{ | |
Console.CancelKeyPress += (sender, e) => | |
{ | |
quitEvent.Set(); | |
e.Cancel = true; | |
}; | |
log.Debug("Creating actor system"); | |
ActorSystem actorSystem = ActorSystem.Create("sample"); | |
quitEvent.WaitOne(); | |
log.Info("Shutting down"); | |
var cluster = Akka.Cluster.Cluster.Get(actorSystem); | |
cluster.RegisterOnMemberRemoved(() => MemberRemoved(actorSystem)); | |
cluster.Leave(cluster.SelfAddress); | |
asTerminatedEvent.WaitOne(); | |
log.Info("Actor system terminated, exiting"); | |
if (System.Diagnostics.Debugger.IsAttached) Console.ReadLine(); | |
} | |
private static async void MemberRemoved(ActorSystem actorSystem) | |
{ | |
await actorSystem.Terminate(); | |
asTerminatedEvent.Set(); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<configuration> | |
<configSections> | |
<section name="akka" type="Akka.Configuration.Hocon.AkkaConfigurationSection, Akka" /> | |
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> | |
</configSections> | |
<log4net> | |
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> | |
<mapping> | |
<level value="ERROR" /> | |
<foreColor value="Red, HighIntensity" /> | |
</mapping> | |
<mapping> | |
<level value="WARN" /> | |
<foreColor value="Yellow" /> | |
</mapping> | |
<mapping> | |
<level value="INFO" /> | |
<foreColor value="White, HighIntensity" /> | |
</mapping> | |
<mapping> | |
<level value="DEBUG" /> | |
<foreColor value="White" /> | |
</mapping> | |
<layout type="log4net.Layout.PatternLayout"> | |
<conversionPattern value="%5level %date{HH:mm:ss} [%2thread] %30.30logger - %message%newline" /> | |
</layout> | |
</appender> | |
<root> | |
<level value="DEBUG" /> | |
<appender-ref ref="ColoredConsoleAppender" /> | |
</root> | |
</log4net> | |
<akka> | |
<hocon> | |
<![CDATA[ | |
akka { | |
actor { | |
provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster" | |
serializers { | |
wire = "Akka.Serialization.WireSerializer, Akka.Serialization.Wire" | |
} | |
serialization-bindings { | |
"System.Object" = wire | |
} | |
} | |
remote { | |
helios.tcp { | |
transport-class = "Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote" | |
applied-adapters = [] | |
transport-protocol = tcp | |
hostname = "127.0.0.1" | |
port = 0 | |
} | |
} | |
loggers = ["Akka.Logger.log4net.Log4NetLogger,Akka.Logger.log4net"] | |
cluster { | |
seed-nodes = ["akka.tcp://sample@127.0.0.1:7001"] | |
roles = [node1] | |
} | |
} | |
]]> | |
</hocon> | |
</akka> | |
<startup> | |
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> | |
</startup> | |
<runtime> | |
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | |
<dependentAssembly> | |
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> | |
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /> | |
</dependentAssembly> | |
<dependentAssembly> | |
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> | |
<bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.2.0.0" /> | |
</dependentAssembly> | |
</assemblyBinding> | |
</runtime> | |
</configuration> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Threading; | |
using Akka.Actor; | |
namespace ClusterWorkerNode | |
{ | |
class Program | |
{ | |
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName); | |
private static readonly ManualResetEvent quitEvent = new ManualResetEvent(false); | |
private static readonly ManualResetEvent asTerminatedEvent = new ManualResetEvent(false); | |
static void Main(string[] args) | |
{ | |
Console.CancelKeyPress += (sender, e) => | |
{ | |
quitEvent.Set(); | |
e.Cancel = true; | |
}; | |
log.Debug("Creating actor system"); | |
ActorSystem actorSystem = ActorSystem.Create("sample"); | |
quitEvent.WaitOne(); | |
log.Info("Shutting down"); | |
var cluster = Akka.Cluster.Cluster.Get(actorSystem); | |
cluster.RegisterOnMemberRemoved(() => MemberRemoved(actorSystem)); | |
cluster.Leave(cluster.SelfAddress); | |
asTerminatedEvent.WaitOne(); | |
log.Info("Actor system terminated, exiting"); | |
if (System.Diagnostics.Debugger.IsAttached) Console.ReadLine(); | |
} | |
private static async void MemberRemoved(ActorSystem actorSystem) | |
{ | |
await actorSystem.Terminate(); | |
asTerminatedEvent.Set(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
To reproduce the leave/shutdown problem:
This is the output: