This is an automated email from the ASF dual-hosted git repository.
dinglei pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git
The following commit(s) were added to refs/heads/develop by this push:
new b11bbd9 [ISSUE #1147]Add name server domain host support (#1175)
b11bbd9 is described below
commit b11bbd943780215458cb39a677be6e21efb36d10
Author: Heng Du <[email protected]>
AuthorDate: Thu Apr 25 10:52:03 2019 +0800
[ISSUE #1147]Add name server domain host support (#1175)
* Add nameserver host support
* Polish namespace auto obtain feature
---
.../org/apache/rocketmq/client/ClientConfig.java | 21 ++++++++++--
.../common/utils/NameServerAddressUtils.java | 40 ++++++++++++++++++++++
2 files changed, 58 insertions(+), 3 deletions(-)
diff --git a/client/src/main/java/org/apache/rocketmq/client/ClientConfig.java
b/client/src/main/java/org/apache/rocketmq/client/ClientConfig.java
index 9a66744..6493f2d 100644
--- a/client/src/main/java/org/apache/rocketmq/client/ClientConfig.java
+++ b/client/src/main/java/org/apache/rocketmq/client/ClientConfig.java
@@ -18,12 +18,11 @@ package org.apache.rocketmq.client;
import java.util.HashSet;
import java.util.Set;
-
import org.apache.commons.lang3.StringUtils;
-import org.apache.rocketmq.common.MixAll;
import org.apache.rocketmq.common.UtilAll;
import org.apache.rocketmq.common.message.MessageQueue;
import org.apache.rocketmq.common.protocol.NamespaceUtil;
+import org.apache.rocketmq.common.utils.NameServerAddressUtils;
import org.apache.rocketmq.remoting.common.RemotingUtil;
import org.apache.rocketmq.remoting.netty.TlsSystemConfig;
import org.apache.rocketmq.remoting.protocol.LanguageCode;
@@ -33,7 +32,7 @@ import org.apache.rocketmq.remoting.protocol.LanguageCode;
*/
public class ClientConfig {
public static final String SEND_MESSAGE_WITH_VIP_CHANNEL_PROPERTY =
"com.rocketmq.sendMessageWithVIPChannel";
- private String namesrvAddr =
System.getProperty(MixAll.NAMESRV_ADDR_PROPERTY,
System.getenv(MixAll.NAMESRV_ADDR_ENV));
+ private String namesrvAddr =
NameServerAddressUtils.getNameServerAddresses();
private String clientIP = RemotingUtil.getLocalAddress();
private String instanceName = System.getProperty("rocketmq.client.name",
"DEFAULT");
private int clientCallbackExecutorThreads =
Runtime.getRuntime().availableProcessors();
@@ -161,9 +160,16 @@ public class ClientConfig {
}
public String getNamesrvAddr() {
+ if (StringUtils.isNotEmpty(namesrvAddr) &&
NameServerAddressUtils.NAMESRV_ENDPOINT_PATTERN.matcher(namesrvAddr.trim()).matches())
{
+ return
namesrvAddr.substring(NameServerAddressUtils.ENDPOINT_PREFIX.length());
+ }
return namesrvAddr;
}
+ /**
+ * Domain name mode access way does not support the delimiter(;), and only
one domain name can be set.
+ * @param namesrvAddr name server address
+ */
public void setNamesrvAddr(String namesrvAddr) {
this.namesrvAddr = namesrvAddr;
}
@@ -241,6 +247,15 @@ public class ClientConfig {
}
public String getNamespace() {
+ if (StringUtils.isNotEmpty(namespace)) {
+ return namespace;
+ }
+
+ if (StringUtils.isNotEmpty(this.namesrvAddr)) {
+ if (NameServerAddressUtils.validateInstanceEndpoint(namesrvAddr)) {
+ return
NameServerAddressUtils.parseInstanceIdFromEndpoint(namesrvAddr);
+ }
+ }
return namespace;
}
diff --git
a/common/src/main/java/org/apache/rocketmq/common/utils/NameServerAddressUtils.java
b/common/src/main/java/org/apache/rocketmq/common/utils/NameServerAddressUtils.java
new file mode 100644
index 0000000..6aaf3a2
--- /dev/null
+++
b/common/src/main/java/org/apache/rocketmq/common/utils/NameServerAddressUtils.java
@@ -0,0 +1,40 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding
copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.rocketmq.common.utils;
+
+import java.util.regex.Pattern;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.rocketmq.common.MixAll;
+
+public class NameServerAddressUtils {
+ public static final String INSTANCE_PREFIX = "MQ_INST_";
+ public static final String INSTANCE_REGEX = INSTANCE_PREFIX + "\\w+_\\w+";
+ public static final String ENDPOINT_PREFIX = "http://";
+ public static final Pattern NAMESRV_ENDPOINT_PATTERN = Pattern.compile("^"
+ ENDPOINT_PREFIX + ".*");
+ public static final Pattern INST_ENDPOINT_PATTERN = Pattern.compile("^" +
ENDPOINT_PREFIX + INSTANCE_REGEX + "\\..*");
+
+ public static String getNameServerAddresses() {
+ return System.getProperty(MixAll.NAMESRV_ADDR_PROPERTY,
System.getenv(MixAll.NAMESRV_ADDR_ENV));
+ }
+
+ public static boolean validateInstanceEndpoint(String endpoint) {
+ return INST_ENDPOINT_PATTERN.matcher(endpoint).matches();
+ }
+
+ public static String parseInstanceIdFromEndpoint(String endpoint) {
+ if (StringUtils.isEmpty(endpoint)) {
+ return null;
+ }
+ return endpoint.substring(ENDPOINT_PREFIX.length(),
endpoint.indexOf('.'));
+ }
+}