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(); }
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)); }