如果资源路径包含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; }