public IActionResult reportServerChanged([FromRoute] string id, [FromBody] proxyNettyServer server)
        {
            if (localRunServer.Instance.ownServer.id != id)
            {
                return(FailedMsg("错误的Id,与请求服务器不符"));
            }
            if (localRunServer.Instance.zoneRole != ServerRoleEnum.zoneMaster)
            {
                return(FailedMsg("I am not a master server"));
            }
            var oldserver = localRunServer.Instance.ownCluster.getzoneServerById(server.id);

            if (oldserver == null)
            {
                if (localRunServer.Instance.ownCluster.slave == null)
                {
                    localRunServer.Instance.ownCluster.setSlave(server);
                }
                else
                {
                    localRunServer.Instance.ownCluster.addRepetion(server);
                }
            }
            else
            {
                oldserver = server;
            }

            var           o  = new { Actiondo = (int)enum_Actiondo.needRsycOneServer, url = localRunServer.Instance.ownServer.serviceUrl, region = localRunServer.Instance.region, zone = localRunServer.Instance.zone, id = server.id };
            actionMessage am = new actionMessage(enum_Actiondo.needNoticeServer, localRunServer.Instance.ownServer.id, localRunServer.Instance.region, "", "", JsonConvert.SerializeObject(o));

            localRunServer.Instance.addActions(am);
            return(SuccessMsg());
        }
Exemple #2
0
 /// <summary>
 /// 代理服务器监测转发服务组
 /// </summary>
 private void checkMapGroup(proxyNettyServer server)
 {
     if (server.checkMapGroupChange())
     {
         actionMessage am = new actionMessage(enum_Actiondo.ServerChanged, ownServer.id, region, "", "", JsonConvert.SerializeObject(new { url = ownServer.serviceUrl, region = region, zone = zoneclusterId, id = server.id }));
         addActions(am);
     }
 }
 public IActionResult NoticeServer([FromRoute] string id, [FromBody] actionMessage am)
 {
     if (localRunServer.Instance.ownServer.id != id)
     {
         return(FailedMsg("错误的Id,与请求服务器不符"));
     }
     else
     {
         localRunServer.Instance.addActions(am);
         return(SuccessMsg("ok"));
     }
 }
Exemple #4
0
 public void addActions(actionMessage am)
 {
     if (am.action == enum_Actiondo.ServerChanged)
     {
         var count = (from x in messagesNeedAction where x.action == enum_Actiondo.ServerChanged select x).Count();
         if (count > 0)
         {
             return;
         }
     }
     messagesNeedAction.Add(am);
 }
Exemple #5
0
        public void noticeServerWithMessage(string url, string noticeId, actionMessage am)
        {
            var respone = hclient.doAsycHttpRequest(string.Format(zoneMasterNoticeUrl, url, noticeId), JObject.FromObject(am), false, url.ToLower().StartsWith("https"));

            if (respone.IsSuccessStatusCode)
            {
                return;
            }
            else
            {
                FrmLib.Log.commLoger.runLoger.Error(string.Format("server {0} noticeServerWithMessage {1} error ,resopne:{2}", ownServer.id, url, respone.ToString()));
            }
        }
Exemple #6
0
        /// <summary>
        /// 检查单台服务器,失联时间超过remove时间,移除并不在检查;小于移除时间大于失效时间,设置失效状态,但进行检查
        /// </summary>
        /// <param name="server"></param>
        private void checkOneProxyServer(proxyNettyServer server)
        {
            if (server == null)
            {
                return;
            }
            if (server.id == ownServer.id)
            {
                return;
            }
            if (server.status == serverStatusEnum.Disable)
            {
                return;
            }
            var ts        = (DateTime.Now - server.lastLive).TotalSeconds;
            var oldstatus = server.status;

            if (ts > this.serverRemoveTimes)
            {
                //should remove server
                Console.WriteLine("checkOneProxyServer server set Disable ");
                server.setStatus(serverStatusEnum.Disable);
            }
            else
            {
                if (ts > this.serverFailTimes)
                {
                    var sid = _rsycClient.getEchoServerId(server.serviceUrl);
                    if (sid == server.id)
                    {
                        Console.WriteLine("checkOneProxyServer server set ready ");
                        server.lastLive = DateTime.Now;
                        server.setStatus(serverStatusEnum.Ready);
                    }
                    else
                    {
                        Console.WriteLine("checkOneProxyServer server set fail ");
                        server.setStatus(serverStatusEnum.Fail);
                    }
                }
            }

            if (oldstatus != server.status)
            {
                Console.WriteLine("checkOneProxyServer server add actions ");
                actionMessage am = new actionMessage(enum_Actiondo.ServerChanged, ownServer.id, region, "", "", JsonConvert.SerializeObject(new { url = ownServer.serviceUrl, region = region, zone = zoneclusterId, id = server.id }));
                addActions(am);
            }
        }
Exemple #7
0
        /// <summary>
        /// 通知服务器列表重新设置集群主服务器
        /// </summary>
        /// <param name="noticeList">被通知列表</param>
        /// <param name="masterServer">集群主服务器</param>

        public void noticeZoneSetMaster(IList <proxyNettyServer> noticeList, proxyNettyServer masterServer)
        {
            foreach (var one in noticeList)
            {
                if (one.id == ownServer.id)
                {
                    continue;
                }
                var jobj = (new JObject());
                jobj.Add("url", masterServer.serviceUrl);
                actionMessage am      = new actionMessage(enum_Actiondo.noticeToRsycZoneMaster, ownServer.id, this.region, one.id, this.region, jobj.ToString());
                var           respone = hclient.doAsycHttpRequest(string.Format(zoneMasterNoticeUrl, one.serviceUrl, one.id), JObject.FromObject(am), false, one.serviceUrl.ToLower().StartsWith("https"));

                if (respone.IsSuccessStatusCode)
                {
                    continue;
                }
                else
                {
                    FrmLib.Log.commLoger.runLoger.Error(string.Format("server {0} noticeZoneSetMaster {1} error ,resopne:{2}", ownServer.id, one.serviceUrl, respone.ToString()));
                }
            }
        }
Exemple #8
0
        /// <summary>
        /// actionMessage 处理器
        /// </summary>
        /// <param name="state"></param>
        /// <param name="e"></param>
        private void triggerActionMessageProcesser(Object state, System.Timers.ElapsedEventArgs e)
        {
            if (actionPNowDo)
            {
                return;
            }
            lock (actionLockobj)
            {
                if (!actionPNowDo)
                {
                    actionPNowDo = true;
                }
            }
            IList <actionMessage> processlist;

            lock (messagesNeedAction)
            {
                processlist        = messagesNeedAction;
                messagesNeedAction = new List <actionMessage>();
            }

            try {
                while (processlist.Count > 0)
                {
                    var one = processlist[0];
                    switch (one.action)
                    {
                    case (enum_Actiondo.noticeToRsycZoneMaster):
                        break;

                    case (enum_Actiondo.noticeToRsycRegionMaster):
                        break;

                    case (enum_Actiondo.broadcastFromRegionMaster):
                        break;

                    case (enum_Actiondo.resetZoneMasterServer):
                        break;

                    case (enum_Actiondo.resetZoneServers):

                        break;

                    case (enum_Actiondo.resetRegionMasterServer):
                        break;

                    case (enum_Actiondo.resetRegionServers):
                        break;

                    case (enum_Actiondo.resetRegionZones):
                        break;

                    case (enum_Actiondo.serverAdd):

                    case (enum_Actiondo.ServerChanged):
                        if (zoneRole != ServerRoleEnum.zoneMaster)
                        {
                            _rsycClient.reportMyChangeToMaster();
                        }
                        break;

                    case (enum_Actiondo.serverRemove):
                        break;

                    case (enum_Actiondo.needNoticeServer):
                        if (zoneRole == ServerRoleEnum.zoneMaster)
                        {
                            actionMessage am = new actionMessage(enum_Actiondo.needRsycOneServer, ownServer.id, region, null, null, one.messageParam);
                            if (ownCluster.slave != null)
                            {
                                _rsycClient.noticeServerWithMessage(ownCluster.slave.serviceUrl, ownCluster.slave.id, am);
                            }
                            foreach (var obj in ownCluster.repetionList)
                            {
                                _rsycClient.noticeServerWithMessage(obj.serviceUrl, obj.id, am);
                            }
                        }
                        break;

                    case (enum_Actiondo.needRsycOneServer):
                        if (zoneRole != ServerRoleEnum.zoneMaster)
                        {
                            var jobj      = JObject.Parse(one.messageParam);
                            var url       = jobj["url"].ToString();
                            var region    = jobj["region"].ToString();
                            var zone      = jobj["zone"].ToString();
                            var id        = jobj["id"].ToString();
                            var newserver = _rsycClient.getServer(url, id, region, zone);
                            if (newserver == null || newserver.id == ownServer.id)
                            {
                                return;
                            }
                            var oldserver = ownCluster.getzoneServerById(newserver.id);
                            if (oldserver != null)
                            {
                                oldserver = newserver;
                            }
                            else
                            {
                                if (ownCluster.slave == null)
                                {
                                    ownCluster.setSlave(newserver);
                                }
                                else
                                {
                                    ownCluster.addRepetion(newserver);
                                }
                            }
                        }
                        break;
                    }
                    processlist.Remove(one);
                }
            }
            catch (Exception ex)
            {
            }
            finally
            {
                actionPNowDo = false;
            }
        }