コード例 #1
0
        public bool TryGet <T>(string key, out T value)
        {
            value = default(T);
            if (!IsRunning)
            {
                return(false);
            }
            var path = BuildZooKeeperPath(this._configInfo.ConfigName.ToLower(), this._configInfo.VersionInfo, this._envInfo.DeployKey.ToLower(), key.ToLower());

            try
            {
                if (_client.EnsureExists(path, false))
                {
                    var data = _client.EnsureGetData(path);
                    if (data != null)
                    {
                        value = Deserialize <T>(data);
                        return(true);
                    }
                }
                else
                {
                    var defautEnv = BuildZooKeeperPath(this._configInfo.ConfigName.ToLower(), this._configInfo.VersionInfo, _defaultEvnKey, key.ToLower());
                    if (_client.EnsureExists(defautEnv, false))
                    {
                        var data = _client.EnsureGetData(defautEnv);
                        if (data != null)
                        {
                            value = Deserialize <T>(data);
                            return(true);
                        }
                    }
                }
            }
            catch (IkZooKeeperNet.KeeperException.NoNodeException)
            {
            }
            catch (Exception ex)
            {
                logger.Warn(string.Format("配置获取失败,配置名称:{0},配置版本:{1},key:{2}", this._configInfo.ConfigName, this._configInfo.VersionInfo, key), ex);
            }

            return(false);
        }
コード例 #2
0
        protected override void ShutDownService()
        {
            _logger.Info("分布式订阅服务开始关闭");
            sourceArrays.CompleteAdding();

            var list = workerThreads.ToList();

            foreach (var item in list)
            {
                item.Stop();
            }
            while (workerThreads.Count > 0)
            {
                Thread.Sleep(200);
            }
            _logger.Info("心跳检查及通信清理服务关闭完成");
            var topics = LocalSubscribeContext.Current.GetDistributedSubscriptionTopics();

            var address = string.Format("{0}:{1}", GetIntranetIp(), this._port);

            foreach (var topic in topics)
            {
                var path = BuildZooKeeperPath(topic, address);
                try
                {
                    if (_client.EnsureExists(path, false))
                    {
                        _client.EnsureDelete(path);
                    }
                    _logger.Info(string.Format("取消订阅完成,主题:{0},地址:{1}", topic, address));
                    RemoveEventPublisher(topic, address);
                }
                catch (Exception ex)
                {
                    _logger.Error(string.Format("清理消费错误,主题:{0},地址:{1}", topic, address), ex);
                }
            }
            _logger.Info(string.Format("已取消订阅{0}个", topics.Count));
            this._client.Dispose();
            if (this._islistener)
            {
                host.Close();
            }
            _logger.Info("分布式订阅服务关闭完成");
        }
コード例 #3
0
        protected override void StartService()
        {
            int port = ConfigManager.Instance.Get <int>("event_listener_port");

            if (port > 0)
            {
                this._port = port;
            }

            int heartbeatCheckMilliseconds = ConfigManager.Instance.Get <int>("event_heartbeat_check");

            if (heartbeatCheckMilliseconds > 0)
            {
                this._heartbeatCheckMilliseconds = heartbeatCheckMilliseconds;
            }
            string eventServerAddress = ConfigManager.Instance.Get <string>("event_server_address");

            if (string.IsNullOrEmpty(eventServerAddress))
            {
                throw new EventException("事件服务地址不能为空");
            }
            this._eventServerAddress = eventServerAddress;
            this._client             = new IkZooKeeperClient(eventServerAddress, TimeSpan.FromSeconds(15), null);
            _logger.Info(string.Format("开始分布式事件订阅服务,监听端口:{0},心跳检查时间:{1},事件服务地址:{2}", this._port, this._heartbeatCheckMilliseconds, eventServerAddress));
            Task.Run(() =>
            {
                foreach (var item in sourceArrays.GetConsumingEnumerable())
                {
                    if (item.ClearType == ClearType.Address)
                    {
                        var publisher = GetEventPublisher(item.Topic, item.Address);
                        bool flag     = false;
                        try
                        {
                            publisher.EventPublisher.Heartbeat();
                            flag = true;
                            break;
                        }
                        catch { }
                        if (!flag)
                        {
                            var path = BuildZooKeeperPath(item.Topic, item.Address);
                            try
                            {
                                if (_client.EnsureExists(path, false))
                                {
                                    _client.EnsureDelete(path);
                                }
                                if (!RemoveEventPublisher(item.Topic, item.Address))
                                {
                                    _logger.Error(string.Format("清理通信通道错误,主题:{0},地址:{1}", item.Topic, item.Address));
                                }
                            }
                            catch (Exception ex)
                            {
                                _logger.Error(string.Format("清理消费错误,主题:{0},地址:{1}", item.Topic, item.Address), ex);
                            }
                        }
                    }
                    else
                    {
                        var path = BuildZooKeeperPath(item.Topic);
                        try
                        {
                            if (_client.EnsureExists(path, false))
                            {
                                _client.EnsureDelete(path);
                            }
                        }
                        catch (Exception ex)
                        {
                            _logger.Error(string.Format("清理消费错误,主题:{0}", item.Topic), ex);
                        }
                    }
                }
            });
            CheckTopicServerHeartbeat();
            EnsureSubscribe();
            var worker = AddWorkerThread();

            worker.Start();
        }