in src/MQClientFactory.cpp [227:265]
boost::shared_ptr<TopicPublishInfo> MQClientFactory::topicRouteData2TopicPublishInfo(const string& topic,
TopicRouteData* pRoute) {
boost::shared_ptr<TopicPublishInfo> info(new TopicPublishInfo());
string OrderTopicConf = pRoute->getOrderTopicConf();
//<! order msg
if (!OrderTopicConf.empty()) {
// "broker-a:8";"broker-b:8"
vector<string> brokers;
UtilAll::Split(brokers, OrderTopicConf, ';');
for (size_t i = 0; i < brokers.size(); i++) {
vector<string> item;
UtilAll::Split(item, brokers[i], ':');
size_t nums = (item.size() > 1) ? atoi(item[1].c_str()) : 0;
for (size_t i = 0; i < nums; i++) {
MQMessageQueue mq(topic, item[0], i);
info->updateMessageQueueList(mq);
}
}
}
//<!no order msg
else {
vector<QueueData>& queueDatas = pRoute->getQueueDatas();
vector<QueueData>::iterator it = queueDatas.begin();
for (; it != queueDatas.end(); ++it) {
QueueData& qd = (*it);
if (PermName::isWriteable(qd.perm)) {
string addr = findBrokerAddressInPublish(qd.brokerName);
if (addr.empty()) {
continue;
}
for (int i = 0; i < qd.writeQueueNums; i++) {
MQMessageQueue mq(topic, qd.brokerName, i);
info->updateMessageQueueList(mq);
}
}
}
}
return info;
}