From 711281188174905fd22738feb83dc2bd39df2259 Mon Sep 17 00:00:00 2001 From: Jason Song Date: Wed, 18 May 2016 17:43:36 +0800 Subject: [PATCH] add appId and ip address when querying from meta server --- .../internals/ConfigServiceLocator.java | 23 +++++++++++++++++-- .../controller/ServiceController.java | 5 +++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/apollo-client/src/main/java/com/ctrip/apollo/internals/ConfigServiceLocator.java b/apollo-client/src/main/java/com/ctrip/apollo/internals/ConfigServiceLocator.java index d3c6b15be..3ee010325 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/internals/ConfigServiceLocator.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/internals/ConfigServiceLocator.java @@ -1,6 +1,10 @@ package com.ctrip.apollo.internals; +import com.google.common.base.Joiner; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.escape.Escaper; +import com.google.common.net.UrlEscapers; import com.google.gson.reflect.TypeToken; import com.ctrip.apollo.core.dto.ServiceDTO; @@ -19,9 +23,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.unidal.lookup.annotation.Inject; import org.unidal.lookup.annotation.Named; +import org.unidal.net.Networks; import java.lang.reflect.Type; import java.util.List; +import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -37,6 +43,7 @@ public class ConfigServiceLocator implements Initializable { private AtomicReference> m_configServices; private Type m_responseType; private ScheduledExecutorService m_executorService; + private static final Joiner.MapJoiner MAP_JOINER = Joiner.on("&").withKeyValueSeparator("="); /** * Create a config service locator. @@ -96,8 +103,7 @@ public class ConfigServiceLocator implements Initializable { } private synchronized void updateConfigServices() { - String domainName = m_configUtil.getMetaServerDomainName(); - String url = domainName + "/services/config"; + String url = assembleMetaServiceUrl(); HttpRequest request = new HttpRequest(url); int maxRetries = 5; @@ -130,6 +136,19 @@ public class ConfigServiceLocator implements Initializable { throw new RuntimeException("Get config services failed", exception); } + private String assembleMetaServiceUrl() { + String domainName = m_configUtil.getMetaServerDomainName(); + String appId = m_configUtil.getAppId(); + String localIp = Networks.forIp().getLocalHostAddress(); + + Escaper escaper = UrlEscapers.urlPathSegmentEscaper(); + Map queryParams = Maps.newHashMap(); + queryParams.put("appId", escaper.escape(appId)); + queryParams.put("ip", escaper.escape(localIp)); + + return domainName + "/services/config?" + MAP_JOINER.join(queryParams); + } + private void logConfigServicesToCat(List serviceDtos) { for (ServiceDTO serviceDto : serviceDtos) { Cat.logEvent("Apollo.Config.Services", serviceDto.getHomepageUrl()); diff --git a/apollo-configservice/src/main/java/com/ctrip/apollo/metaservice/controller/ServiceController.java b/apollo-configservice/src/main/java/com/ctrip/apollo/metaservice/controller/ServiceController.java index f8c56abff..d29f73764 100644 --- a/apollo-configservice/src/main/java/com/ctrip/apollo/metaservice/controller/ServiceController.java +++ b/apollo-configservice/src/main/java/com/ctrip/apollo/metaservice/controller/ServiceController.java @@ -6,6 +6,7 @@ import com.netflix.appinfo.InstanceInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -39,7 +40,9 @@ public class ServiceController { } @RequestMapping("/config") - public List getConfigService() { + public List getConfigService( + @RequestParam(value = "appId", defaultValue = "") String appId, + @RequestParam(value = "ip", defaultValue = "") String clientIp) { List instances = discoveryService.getConfigServiceInstances(); List result = instances.stream().map(new Function() { -- GitLab