Search in sources :

Example 51 with TopicRouteData

use of org.apache.rocketmq.common.protocol.route.TopicRouteData in project rocketmq-externals by apache.

the class RmqSourceReplicator method ensureTargetTopic.

/**
 * ensure target topic eixst. if target topic does not exist, ensureTopic will create target topic on target
 * cluster, with same TopicConfig but using target topic name. any exception will be caught and then throw
 * IllegalStateException.
 *
 * @param srcTopic
 * @param targetTopic
 * @throws RemotingException
 * @throws MQClientException
 * @throws InterruptedException
 */
public void ensureTargetTopic(String srcTopic, String targetTopic) throws RemotingException, MQClientException, InterruptedException {
    String srcCluster = this.replicatorConfig.getSrcCluster();
    String targetCluster = this.replicatorConfig.getTargetCluster();
    List<BrokerData> brokerList = Utils.examineBrokerData(this.srcMQAdminExt, srcTopic, srcCluster);
    if (brokerList.size() == 0) {
        throw new IllegalStateException(String.format("no broker found for srcTopic: %s srcCluster: %s", srcTopic, srcCluster));
    }
    final TopicRouteData topicRouteData = this.srcMQAdminExt.examineTopicRouteInfo(srcTopic);
    final TopicConfig topicConfig = new TopicConfig();
    final List<QueueData> queueDatas = topicRouteData.getQueueDatas();
    QueueData queueData = queueDatas.get(0);
    topicConfig.setPerm(queueData.getPerm());
    topicConfig.setReadQueueNums(queueData.getReadQueueNums());
    topicConfig.setWriteQueueNums(queueData.getWriteQueueNums());
    topicConfig.setTopicSysFlag(queueData.getTopicSynFlag());
    topicConfig.setTopicName(targetTopic);
    Utils.createTopic(this.targetMQAdminExt, topicConfig, targetCluster);
}
Also used : BrokerData(org.apache.rocketmq.common.protocol.route.BrokerData) QueueData(org.apache.rocketmq.common.protocol.route.QueueData) TopicConfig(org.apache.rocketmq.common.TopicConfig) TopicRouteData(org.apache.rocketmq.common.protocol.route.TopicRouteData)

Example 52 with TopicRouteData

use of org.apache.rocketmq.common.protocol.route.TopicRouteData in project rocketmq-externals by apache.

the class Utils method examineBrokerData.

public static List<BrokerData> examineBrokerData(DefaultMQAdminExt defaultMQAdminExt, String topic, String cluster) throws RemotingException, MQClientException, InterruptedException {
    List<BrokerData> brokerList = new ArrayList<>();
    TopicRouteData topicRouteData = defaultMQAdminExt.examineTopicRouteInfo(topic);
    if (topicRouteData.getBrokerDatas() != null) {
        for (BrokerData broker : topicRouteData.getBrokerDatas()) {
            if (StringUtils.equals(broker.getCluster(), cluster)) {
                brokerList.add(broker);
            }
        }
    }
    return brokerList;
}
Also used : BrokerData(org.apache.rocketmq.common.protocol.route.BrokerData) ArrayList(java.util.ArrayList) TopicRouteData(org.apache.rocketmq.common.protocol.route.TopicRouteData)

Example 53 with TopicRouteData

use of org.apache.rocketmq.common.protocol.route.TopicRouteData in project rocketmq-externals by apache.

the class CassandraSinkConnector method buildRoute.

public void buildRoute() {
    String srcCluster = ((SinkDbConnectorConfig) this.dbConnectorConfig).getSrcCluster();
    try {
        for (String topic : ((SinkDbConnectorConfig) this.dbConnectorConfig).getWhiteList()) {
            // different from BrokerData with cluster field, which can ensure the brokerData is from expected cluster.
            // QueueData use brokerName as unique info on cluster of rocketmq. so when we want to get QueueData of
            // expected cluster, we should get brokerNames of expected cluster, and then filter queueDatas.
            List<BrokerData> brokerList = Utils.examineBrokerData(this.srcMQAdminExt, topic, srcCluster);
            Set<String> brokerNameSet = new HashSet<String>();
            for (BrokerData b : brokerList) {
                brokerNameSet.add(b.getBrokerName());
            }
            TopicRouteData topicRouteData = srcMQAdminExt.examineTopicRouteInfo(topic);
            if (!topicRouteMap.containsKey(topic)) {
                topicRouteMap.put(topic, new HashSet<>(16));
            }
            for (QueueData qd : topicRouteData.getQueueDatas()) {
                if (brokerNameSet.contains(qd.getBrokerName())) {
                    for (int i = 0; i < qd.getReadQueueNums(); i++) {
                        TaskTopicInfo taskTopicInfo = new TaskTopicInfo(topic, qd.getBrokerName(), i, null);
                        topicRouteMap.get(topic).add(taskTopicInfo);
                    }
                }
            }
        }
    } catch (Exception e) {
        log.error("Fetch topic list error.", e);
    } finally {
    // srcMQAdminExt.shutdown();
    }
}
Also used : BrokerData(org.apache.rocketmq.common.protocol.route.BrokerData) QueueData(org.apache.rocketmq.common.protocol.route.QueueData) MQClientException(org.apache.rocketmq.client.exception.MQClientException) TopicRouteData(org.apache.rocketmq.common.protocol.route.TopicRouteData)

Example 54 with TopicRouteData

use of org.apache.rocketmq.common.protocol.route.TopicRouteData in project rocketmq-externals by apache.

the class Utils method examineBrokerData.

public static List<BrokerData> examineBrokerData(DefaultMQAdminExt defaultMQAdminExt, String topic, String cluster) throws RemotingException, MQClientException, InterruptedException {
    List<BrokerData> brokerList = new ArrayList<>();
    TopicRouteData topicRouteData = defaultMQAdminExt.examineTopicRouteInfo(topic);
    if (topicRouteData.getBrokerDatas() != null) {
        for (BrokerData broker : topicRouteData.getBrokerDatas()) {
            if (StringUtils.equals(broker.getCluster(), cluster)) {
                brokerList.add(broker);
            }
        }
    }
    return brokerList;
}
Also used : BrokerData(org.apache.rocketmq.common.protocol.route.BrokerData) ArrayList(java.util.ArrayList) TopicRouteData(org.apache.rocketmq.common.protocol.route.TopicRouteData)

Example 55 with TopicRouteData

use of org.apache.rocketmq.common.protocol.route.TopicRouteData in project rocketmq-rocketmq-all-4.1.0-incubating by lirenzuo.

the class MQClientInstance method isBrokerInNameServer.

private boolean isBrokerInNameServer(final String brokerAddr) {
    Iterator<Entry<String, TopicRouteData>> it = this.topicRouteTable.entrySet().iterator();
    while (it.hasNext()) {
        Entry<String, TopicRouteData> itNext = it.next();
        List<BrokerData> brokerDatas = itNext.getValue().getBrokerDatas();
        for (BrokerData bd : brokerDatas) {
            boolean contain = bd.getBrokerAddrs().containsValue(brokerAddr);
            if (contain)
                return true;
        }
    }
    return false;
}
Also used : Entry(java.util.Map.Entry) BrokerData(org.apache.rocketmq.common.protocol.route.BrokerData) TopicRouteData(org.apache.rocketmq.common.protocol.route.TopicRouteData)

Aggregations

TopicRouteData (org.apache.rocketmq.common.protocol.route.TopicRouteData)92 BrokerData (org.apache.rocketmq.common.protocol.route.BrokerData)65 ArrayList (java.util.ArrayList)25 MQClientException (org.apache.rocketmq.client.exception.MQClientException)25 QueueData (org.apache.rocketmq.common.protocol.route.QueueData)25 HashMap (java.util.HashMap)22 DefaultMQAdminExt (org.apache.rocketmq.tools.admin.DefaultMQAdminExt)20 MessageQueue (org.apache.rocketmq.common.message.MessageQueue)18 List (java.util.List)16 HashSet (java.util.HashSet)13 Entry (java.util.Map.Entry)12 ConsumeStats (org.apache.rocketmq.common.admin.ConsumeStats)12 ArgumentMatchers.anyLong (org.mockito.ArgumentMatchers.anyLong)12 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)12 RemotingException (org.apache.rocketmq.remoting.exception.RemotingException)11 Field (java.lang.reflect.Field)10 MQBrokerException (org.apache.rocketmq.client.exception.MQBrokerException)10 MQClientAPIImpl (org.apache.rocketmq.client.impl.MQClientAPIImpl)10 MQClientInstance (org.apache.rocketmq.client.impl.factory.MQClientInstance)10 DefaultMQAdminExtImpl (org.apache.rocketmq.tools.admin.DefaultMQAdminExtImpl)10