in producer/producer.go [560:591]
func (p *defaultProducer) tryToFindTopicPublishInfo(topic string) *internal.TopicPublishInfo {
v, exist := p.publishInfo.Load(topic)
if !exist {
data, changed, err := p.client.GetNameSrv().UpdateTopicRouteInfo(topic)
if err != nil && primitive.IsRemotingErr(err) {
return nil
}
p.client.UpdatePublishInfo(topic, data, changed)
v, exist = p.publishInfo.Load(topic)
}
if !exist {
data, changed, _ := p.client.GetNameSrv().UpdateTopicRouteInfoWithDefault(topic, p.options.CreateTopicKey, p.options.DefaultTopicQueueNums)
p.client.UpdatePublishInfo(topic, data, changed)
v, exist = p.publishInfo.Load(topic)
}
if !exist {
return nil
}
result := v.(*internal.TopicPublishInfo)
if result == nil || !result.HaveTopicRouterInfo {
return nil
}
if len(result.MqList) <= 0 {
rlog.Error("can not find proper message queue", nil)
return nil
}
return result
}