/// <summary> /// Get A Etcd key from a actorNode /// if null, return top Key, means all actorNodes /// </summary> /// <param name="actorNodeConfig"></param> /// <returns></returns> private string GetEtcdKeyFromActorNode(ActorNodeConfig actorNodeConfig) { if (actorNodeConfig == null) { return(_etcdTopKey); } return(string.Format("{0}/{1}", _etcdTopKey, actorNodeConfig.Name)); }
public override void Init(ActorNodeConfig conf) { base.Init(conf); Task.Factory.StartNew(async () => { await GoRequest(); }); }
public static Actor Create(ActorNodeConfig conf) { var actorType = Type.GetType(conf.ActorClass); if (actorType == null) throw new Exception(string.Format("Not found Actor Class: {0}", conf.ActorClass)); var obj = (Actor)Activator.CreateInstance(actorType); obj.Init(conf); return obj; }
public virtual void Init(ActorNodeConfig conf) { IsActive = true; Conf = conf; RpcService = NewRpcCaller(); RpcServer = new RpcServer(RpcService, "*", conf.RpcPort); _discovery = new Discovery(Conf.AppToken, Conf.DiscoveryMode, Conf.DiscoveryParam); }
/// <summary> /// 注册一个Actor节点, 通常在Actor启动时注册, 并定时进行心跳式注册, 告诉其它节点"我还在生" /// </summary> /// <param name="actorNodeConfig"></param> /// <returns></returns> public async Task <bool> RegisterActor(ActorNodeConfig actorNodeConfig) { if (actorNodeConfig == null) { return(false); } var etcdKey = GetEtcdKeyFromActorNode(actorNodeConfig); var response = await SetAsync(etcdKey, actorNodeConfig.ToJson()); return(response != null); }
public static Actor Create(ActorNodeConfig conf) { var actorType = Type.GetType(conf.ActorClass); if (actorType == null) { throw new Exception(string.Format("Not found Actor Class: {0}", conf.ActorClass)); } var obj = (Actor)Activator.CreateInstance(actorType); obj.Init(conf); return(obj); }
/// <summary> /// 递归一个Etcd节点,并解析这棵Etcd数所有的ActorNode节点数据 /// </summary> /// <param name="etcdNode"></param> /// <param name="nodes"></param> private void RecurseEtcdNode(Node etcdNode, ref Dictionary <string, ActorNodeConfig> nodes) { if (etcdNode.Dir) { foreach (var subNode in etcdNode.Nodes) { RecurseEtcdNode(subNode, ref nodes); } } else { var actorNodeCfg = ActorNodeConfig.FromJson(etcdNode.Value); nodes.Add(actorNodeCfg.Name, actorNodeCfg); } }
public static void Main(string[] args) { var configA = new ActorNodeConfig(); configA.AppToken = "AppToken1"; configA.ActorClass = "Cosmos.Test.Performance.ActorA, Cosmos.Test.Performance"; configA.Name = "TestActorA"; configA.DiscoveryParam = "discovery.json"; var configB = new ActorNodeConfig(); configB.AppToken = "AppToken1"; configB.ActorClass = "Cosmos.Test.Performance.ActorB, Cosmos.Test.Performance"; configB.Name = "TestActorB"; configB.DiscoveryParam = "discovery.json"; ActorRunner.Run(configA); ActorRunner.Run(configB); while (true) { Thread.Sleep(1000); } }
private ActorRunner(ActorNodeConfig conf) { Conf = conf; State = ActorRunState.Running; ActorThread = Task.Run(async () => { Actor = ActorFactory.Create(conf); while (Actor.IsActive) { await Task.Delay(1000); SecondsTick++; } }); //while (State == ActorRunState.None) //{ // // block //} Runners[conf.Name] = this; }
public TestActor() { // A server var discoverServers = new string[] {"http://127.0.0.1:4001"}; var actorConf = new ActorNodeConfig() { Name = "Actor-Test-A", DiscoveryParam = discoverServers, ActorClass = "CosmosTest.SampleActor, Cosmos.Test", }; _actorA = ActorRunner.Run(actorConf); Assert.AreEqual(_actorA.State, ActorRunState.Running); // B Server var actorConfB = new ActorNodeConfig() { Name = "Actor-Test-B", DiscoveryParam = discoverServers, ActorClass = "CosmosTest.SampleActor, Cosmos.Test", }; _actorB = ActorRunner.Run(actorConfB); Assert.AreEqual(_actorB.State, ActorRunState.Running); }
private ActorRunner(ActorNodeConfig conf) { Conf = conf; State = ActorRunState.Running; ActorThread = Task.Run(async() => { Actor = ActorFactory.Create(conf); while (Actor.IsActive) { await Task.Delay(1000); SecondsTick++; } }); //while (State == ActorRunState.None) //{ // // block //} Runners[conf.Name] = this; }
void OnActorNodesChanged(ActorNodeConfig[] nodes) { }
/// <summary> /// TODO: create a actor in new process! /// </summary> /// <returns>The process actor.</returns> /// <param name="config">Config.</param> public virtual ActorNodeConfig NewProcessActor(ActorNodeConfig config) { return default(ActorNodeConfig); }
/// <summary> /// TODO: create a actor in thread! not in config /// </summary> /// <returns>The thread actor.</returns> /// <param name="config">Config.</param> public virtual ActorNodeConfig NewThreadActor(ActorNodeConfig config) { return default(ActorNodeConfig); }
/// <summary> /// Get A Etcd key from a actorNode /// if null, return top Key, means all actorNodes /// </summary> /// <param name="actorNodeConfig"></param> /// <returns></returns> private string GetEtcdKeyFromActorNode(ActorNodeConfig actorNodeConfig) { if (actorNodeConfig == null) return _etcdTopKey; return string.Format("{0}/{1}", _etcdTopKey, actorNodeConfig.Name); }
public static ActorRunner Run(ActorNodeConfig conf) { ActorRunner runner = new ActorRunner(conf); return(runner); }
/// <summary> /// 注册一个Actor节点, 通常在Actor启动时注册, 并定时进行心跳式注册, 告诉其它节点"我还在生" /// </summary> /// <param name="actorNodeConfig"></param> /// <returns></returns> public async Task<bool> RegisterActor(ActorNodeConfig actorNodeConfig) { if (actorNodeConfig == null) return false; var etcdKey = GetEtcdKeyFromActorNode(actorNodeConfig); var response = await SetAsync(etcdKey, actorNodeConfig.ToJson()); return response != null; }
IEnumerator<object> WaitRunner() { var actorConf = new ActorNodeConfig { Name = "Actor-Test-1", ActorClass = "CosmosTest.SampleActor, CosmosTest", }; var runner1 = ActorRunner.Run(actorConf); Assert.AreEqual(runner1.SecondsTick, 0); while (runner1.State != ActorRunState.Running) yield return null; Assert.AreEqual(runner1.State, ActorRunState.Running); var runner2 = ActorRunner.GetActorStateByName("Actor-Test-1"); Assert.AreEqual(runner2.State, ActorRunState.Running); Assert.AreEqual(runner2.ActorName, "Actor-Test-1"); }
public static ActorRunner Run(ActorNodeConfig conf) { ActorRunner runner = new ActorRunner(conf); return runner; }
public async void RegisterEtcdNode() { var dis = new EtcdDiscoveryMode("testTopKey", "http://localhost:2379"); var testNode = new ActorNodeConfig(); testNode.Name = "TestNodeDir/TestNodeKey1"; testNode.Host = "TestHost"; var result = await dis.RegisterActor(testNode); Assert.IsTrue(result); var nodes = await dis.GetNodes(); Assert.AreEqual(nodes["TestNodeDir/TestNodeKey1"].Host, "TestHost"); }
public override void Init(ActorNodeConfig conf) { base.Init(conf); _handlerServer = new HandlerServer(GetHandler(), conf.ResponsePort); }