Пример #1
0
        private void InitNewQmqClients(bool forceLoad = false)
        {
            var clusterInfo = _isDelayMessage ? _brokerGroupService.DelayProducerGetSubjectCluster(_subject, forceLoad) : _brokerGroupService.ProducerGetSubjectCluster(_subject, forceLoad);

            foreach (var brokerGroup in clusterInfo.BrokerGroups.Values)
            {
                ClientManager.GetOrCreate(brokerGroup);
            }
            _avaliable = true;
            _waitAvaliable.Set();
        }
Пример #2
0
        private NewQmqClient SelectWritableClient(string subject, bool forceRefreshBrokerGroup, bool isDelayMessage)
        {
            var cluster = isDelayMessage ? _brokerGroupService.DelayProducerGetSubjectCluster(subject, forceRefreshBrokerGroup) : _brokerGroupService.ProducerGetSubjectCluster(subject, forceRefreshBrokerGroup);

            if (cluster.BrokerGroups.Count == 0)
            {
                return(null);
            }

            var brokerGroups = cluster.BrokerGroups.Values.Where(BrokerGroup.IsWritable).ToList();

            if (brokerGroups.Count == 0)
            {
                return(null);
            }

            // First of all, random select a client.
            // If random selected client is not writable, then select first writable client.
            var randBrokerGroup = brokerGroups.ElementAt(StaticRandom.NextRand(brokerGroups.Count));
            var randClient      = _clientManager.GetOrCreate(randBrokerGroup);

            if (randClient.Writtable)
            {
                return(randClient);
            }
            return(brokerGroups.Select(brokerGroup => _clientManager.GetOrCreate(brokerGroup))
                   .FirstOrDefault(client => client.Writtable));
        }