public static TopicPublishInfo topicRouteData2TopicPublishInfo( final String topic, final TopicRouteData route) { TopicPublishInfo info = new TopicPublishInfo(); // 顺序消息 if (route.getOrderTopicConf() != null && route.getOrderTopicConf().length() > 0) { String[] brokers = route.getOrderTopicConf().split(";"); for (String broker : brokers) { String[] item = broker.split(":"); int nums = Integer.parseInt(item[1]); for (int i = 0; i < nums; i++) { MessageQueue mq = new MessageQueue(topic, item[0], i); info.getMessageQueueList().add(mq); } } info.setOrderTopic(true); } // 非顺序消息 else { List<QueueData> qds = route.getQueueDatas(); // 排序原因:即使没有配置顺序消息模式,默认队列的顺序同配置的一致。 Collections.sort(qds); for (QueueData qd : qds) { if (PermName.isWriteable(qd.getPerm())) { for (int i = 0; i < qd.getWriteQueueNums(); i++) { MessageQueue mq = new MessageQueue(topic, qd.getBrokerName(), i); info.getMessageQueueList().add(mq); } } } info.setOrderTopic(false); } return info; }