全站最硬核 百万字强肝RocketMq源码 火热更新中~(四十二)

如果资源路径包含namesapce,那么把namespace去掉

public static String wrapNamespace(String namespace, String resourceWithOutNamespace) {

当然也有反向的,除了去掉resource中的namespace外,还有给resource包上namespace

if (isRetryTopic(resourceWithOutNamespace)) {
    stringBuilder.append(MixAll.RETRY_GROUP_TOPIC_PREFIX);
}

if (isDLQTopic(resourceWithOutNamespace)) {
    stringBuilder.append(MixAll.DLQ_GROUP_TOPIC_PREFIX);
}

return stringBuilder.append(namespace).append(NAMESPACE_SEPARATOR).append(resourceWithoutRetryAndDLQ).toString();

基本是一样的,这里也可以看出来,Topic分RetryTopic,DLQTopic两大类

且namespace是以 % 做分割的

public static final String RETRY_GROUP_TOPIC_PREFIX = "%RETRY%";
public static final String DLQ_GROUP_TOPIC_PREFIX = "%DLQ%";

从MixAll工具类里,这一点也得到应征。

还有RetryTopic DLQTopic的判断方式:

public static boolean isRetryTopic(String resource) {
    return StringUtils.isNotBlank(resource) && resource.startsWith(MixAll.RETRY_GROUP_TOPIC_PREFIX);
}

public static boolean isDLQTopic(String resource) {
    return StringUtils.isNotBlank(resource) && resource.startsWith(MixAll.DLQ_GROUP_TOPIC_PREFIX);
}

也就是该resource资源路径是

以RetryTopic 或者DLQTopic

开头的。

总结下namesapceutil

org.apache.rocketmq.common.protocol.NamespaceUtil

这个工具类,

它围绕namespace

提供了很多拼接,以及拆分的方法

比如把 资源路径中的 namespace 去掉

或者给 资源路径 包上namespace

回到ClientConfig类

public Set<String> withNamespace(Set<String> resourceSet) {
    Set<String> resourceWithNamespace = new HashSet<String>();
    for (String resource : resourceSet) {
        resourceWithNamespace.add(withNamespace(resource));
    }
    return resourceWithNamespace;
}

public String withoutNamespace(String resource) {
    return NamespaceUtil.withoutNamespace(resource, this.getNamespace());
}

public Set<String> withoutNamespace(Set<String> resourceSet) {
    Set<String> resourceWithoutNamespace = new HashSet<String>();
    for (String resource : resourceSet) {
        resourceWithoutNamespace.add(withoutNamespace(resource));
    }
    return resourceWithoutNamespace;
}
上一篇:IDEA启动项目报错:Caused by: java.io.FileNotFoundException: class path resource [.properties] cannot be ope


下一篇:Spring IoC 快速使用入门