Пример #1
0
        private Timer LongPolling(int taskId)
        {
            return(new Timer(
                       async x =>
            {
                var cacheDatas = new List <CacheData>();
                var inInitializingCacheList = new List <string>();
                int selfTaskId = -1;
                int.TryParse(x.ToString(), out selfTaskId);
                try
                {
                    foreach (var cacheData in _cacheMap.Values)
                    {
                        // no listener should stop here.
                        if (cacheData.TaskId == selfTaskId && cacheData.GetListeners() != null && cacheData.GetListeners().Any())
                        {
                            cacheDatas.Add(cacheData);
                            try
                            {
                                await CheckLocalConfig(_agent.GetName(), cacheData);

                                if (cacheData.IsUseLocalConfig)
                                {
                                    cacheData.CheckListenerMd5();
                                }
                            }
                            catch (Exception ex)
                            {
                                _logger?.LogError(ex, "get local config info error");
                            }
                        }
                    }

                    var changedGroupKeys = await CheckUpdateDataIds(cacheDatas, inInitializingCacheList);

                    foreach (string groupKey in changedGroupKeys)
                    {
                        string[] key = GroupKey.ParseKey(groupKey);
                        string dataId = key[0];
                        string group = key[1];
                        string tenant = null;
                        if (key.Length == 3)
                        {
                            tenant = key[2];
                        }

                        try
                        {
                            List <string> ct = await GetServerConfig(dataId, group, tenant, 3000L, true);

                            if (_cacheMap.TryGetValue(GroupKey.GetKeyTenant(dataId, group, tenant), out var cache))
                            {
                                cache.SetContent(ct[0]);

                                if (ct[1] != null)
                                {
                                    cache.Type = ct[1];
                                }

                                _logger?.LogInformation("[{0}] [data-received] dataId={1}, group={2}, tenant={3}, md5={4}, content={5}, type={6}", _agent.GetName(), dataId, group, tenant, cache.Md5,
                                                        ContentUtils.TruncateContent(ct[0]), ct[1]);
                            }
                        }
                        catch (Exception ioe)
                        {
                            _logger?.LogError(ioe, "[{0}] [get-update] get changed config exception. dataId={0}, group={2}, tenant={3}", _agent.GetName(), dataId, group, tenant);
                        }
                    }

                    foreach (var cacheData in cacheDatas)
                    {
                        if (!cacheData.IsInitializing || inInitializingCacheList.Contains(GroupKey.GetKeyTenant(cacheData.DataId, cacheData.Group, cacheData.Tenant)))
                        {
                            cacheData.CheckListenerMd5();
                            cacheData.IsInitializing = false;
                        }
                    }

                    inInitializingCacheList.Clear();

                    if (_longPollingMap.TryGetValue(selfTaskId, out var t))
                    {
                        t.Change(1, Timeout.Infinite);
                    }
                }
                catch (Exception ex)
                {
                    _logger?.LogError(ex, "longPolling error");
                    if (_longPollingMap.TryGetValue(selfTaskId, out var t))
                    {
                        t.Change(_taskPenaltyTime, Timeout.Infinite);
                    }
                }
            }, taskId, 0, Timeout.Infinite));
        }
Пример #2
0
        private Timer LongPolling(int taskId)
        {
            return(new Timer(async x =>
            {
                var cacheDatas = new List <CacheData>();
                var inInitializingCacheList = new List <string>();
                int selfTaskId = -1;
                int.TryParse(x.ToString(), out selfTaskId);
                try
                {
                    foreach (var cacheData in _cacheMap.Values)
                    {
                        if (cacheData.TaskId == selfTaskId)
                        {
                            cacheDatas.Add(cacheData);
                            try
                            {
                                CheckLocalConfig(cacheData);
                                if (cacheData.IsUseLocalConfig)
                                {
                                    cacheData.CheckListenerMD5();
                                }
                            }
                            catch (Exception ex)
                            {
                                _logger.Error(ex, "get local config info error");
                            }
                        }
                    }

                    var changedGroupKeys = await CheckUpdateDataIds(cacheDatas, inInitializingCacheList);

                    foreach (string groupKey in changedGroupKeys)
                    {
                        string[] key = GroupKey.ParseKey(groupKey);
                        string dataId = key[0];
                        string group = key[1];
                        string tenant = null;
                        if (key.Length == 3)
                        {
                            tenant = key[2];
                        }
                        try
                        {
                            string content = await GetServerConfig(dataId, group, tenant);

                            CacheData cache = null;
                            if (_cacheMap.TryGetValue(GroupKey.GetKeyTenant(dataId, group, tenant), out cache))
                            {
                                cache.Content = content;
                                _logger.Info($"[{_agent.GetName()}] [data-received] dataId={dataId}, group={group}, tenant={tenant}, md5={cache.MD5}, content={ContentUtils.TruncateContent(content)}");
                            }
                        }
                        catch (Exception ex)
                        {
                            _logger.Error(ex, $"[{_agent.GetName()}] [get-update] get changed config exception. dataId={dataId}, group={group}, tenant={tenant}");
                        }
                    }

                    foreach (var cacheData in cacheDatas)
                    {
                        if (!cacheData.IsInitializing || inInitializingCacheList.Contains(GroupKey.GetKeyTenant(cacheData.DataId, cacheData.Group, cacheData.Tenant)))
                        {
                            cacheData.CheckListenerMD5();
                            cacheData.IsInitializing = false;
                        }
                    }

                    inInitializingCacheList.Clear();

                    Timer t = null;
                    if (_longPollingMap.TryGetValue(selfTaskId, out t))
                    {
                        t.Change(1, Timeout.Infinite);
                    }
                }
                catch (Exception ex)
                {
                    _logger.Error(ex, "longPolling error");
                    Timer t = null;
                    if (_longPollingMap.TryGetValue(selfTaskId, out t))
                    {
                        t.Change(_taskPenaltyTime, Timeout.Infinite);
                    }
                }
            }, taskId, 0, Timeout.Infinite));
        }