moremind commented on code in PR #5269:
URL: https://github.com/apache/shenyu/pull/5269#discussion_r1381259898


##########
shenyu-registry/shenyu-registry-eureka/src/main/java/org/apache/shenyu/registry/eureka/EurekaInstanceRegisterRepository.java:
##########
@@ -50,36 +50,120 @@ public class EurekaInstanceRegisterRepository implements 
ShenyuInstanceRegisterR
 
     private EurekaClient eurekaClient;
 
-    private EurekaHttpClient eurekaHttpClient;
+    private DefaultEurekaClientConfig eurekaClientConfig;
+
+    private EurekaInstanceConfig eurekaInstanceConfig;
+
+    @Inject(optional = true)
+    private VipAddressResolver vipAddressResolver;
 
     @Override
     public void init(final RegisterConfig config) {
-        
ConfigurationManager.getConfigInstance().setProperty("eureka.client.service-url.defaultZone",
 config.getServerLists());
-        
ConfigurationManager.getConfigInstance().setProperty("eureka.serviceUrl.default",
 config.getServerLists());
-        ApplicationInfoManager applicationInfoManager = 
initializeApplicationInfoManager(new MyDataCenterInstanceConfig());
-        eurekaClient = new DiscoveryClient(applicationInfoManager, new 
DefaultEurekaClientConfig());
-        eurekaHttpClient = new JerseyApplicationClient(new 
ApacheHttpClient4(), config.getServerLists(), null);
-    }
-
-    private ApplicationInfoManager initializeApplicationInfoManager(final 
EurekaInstanceConfig instanceConfig) {
-        InstanceInfo instanceInfo = new 
EurekaConfigBasedInstanceInfoProvider(instanceConfig).get();
-        return new ApplicationInfoManager(instanceConfig, instanceInfo);
+        eurekaInstanceConfig = new MyDataCenterInstanceConfig();
+        eurekaClientConfig = new DefaultEurekaClientConfig() {
+            @Override
+            public List<String> getEurekaServerServiceUrls(final String zone) {
+                return Arrays.asList(config.getServerLists().split(","));
+            }
+        };
     }
 
     @Override
     public void persistInstance(final InstanceEntity instance) {
-        EurekaHttpResponse<Void> register = 
eurekaHttpClient.register(generateInstanceInfo(instance));
-        LOGGER.info("eureka client register success: {}", 
register.getEntity());
-    }
-
-    private InstanceInfo generateInstanceInfo(final InstanceEntity instance) {
-        return InstanceInfo.Builder.newBuilder()
-                .setAppName(instance.getAppName())
-                .setIPAddr(IpUtils.getHost())
+        InstanceInfo.Builder instanceInfoBuilder = instanceInfoBuilder();
+        instanceInfoBuilder.setAppName(instance.getAppName())
+                .setIPAddr(instance.getHost())
                 .setHostName(instance.getHost())
                 .setPort(instance.getPort())
-                .setDataCenterInfo(new 
MyDataCenterInfo(DataCenterInfo.Name.MyOwn))
-                .build();
+                .setStatus(InstanceInfo.InstanceStatus.UP);
+        InstanceInfo instanceInfo = instanceInfoBuilder.build();
+        LeaseInfo.Builder leaseInfoBuilder = LeaseInfo.Builder.newBuilder()
+                
.setRenewalIntervalInSecs(eurekaInstanceConfig.getLeaseRenewalIntervalInSeconds())
+                
.setDurationInSecs(eurekaInstanceConfig.getLeaseExpirationDurationInSeconds());
+        instanceInfo.setLeaseInfo(leaseInfoBuilder.build());
+        ApplicationInfoManager applicationInfoManager = new 
ApplicationInfoManager(eurekaInstanceConfig, instanceInfo);
+        eurekaClient = new DiscoveryClient(applicationInfoManager, 
eurekaClientConfig);
+    }
+
+    /**
+     * Gets the instance information from the config instance and returns it 
after setting the appropriate status.
+     * ref: 
com.netflix.appinfo.providers.EurekaConfigBasedInstanceInfoProvider#get
+     *
+     * @return InstanceInfo instance to be registered with eureka server
+     */
+    public InstanceInfo.Builder instanceInfoBuilder() {
+        // Build the lease information to be passed to the server based on 
config
+        if (vipAddressResolver == null) {
+            vipAddressResolver = new Archaius1VipAddressResolver();
+        }
+
+        // Builder the instance information to be registered with eureka server
+        final InstanceInfo.Builder builder = 
InstanceInfo.Builder.newBuilder(vipAddressResolver);
+
+        // set the appropriate id for the InstanceInfo, falling back to 
datacenter Id if applicable, else hostname
+        String instanceId = eurekaInstanceConfig.getInstanceId();
+        if (instanceId == null || instanceId.isEmpty()) {

Review Comment:
   use StringUtils.isEmpty



##########
shenyu-registry/shenyu-registry-eureka/src/main/java/org/apache/shenyu/registry/eureka/EurekaInstanceRegisterRepository.java:
##########
@@ -50,36 +50,120 @@ public class EurekaInstanceRegisterRepository implements 
ShenyuInstanceRegisterR
 
     private EurekaClient eurekaClient;
 
-    private EurekaHttpClient eurekaHttpClient;
+    private DefaultEurekaClientConfig eurekaClientConfig;
+
+    private EurekaInstanceConfig eurekaInstanceConfig;
+
+    @Inject(optional = true)
+    private VipAddressResolver vipAddressResolver;
 
     @Override
     public void init(final RegisterConfig config) {
-        
ConfigurationManager.getConfigInstance().setProperty("eureka.client.service-url.defaultZone",
 config.getServerLists());
-        
ConfigurationManager.getConfigInstance().setProperty("eureka.serviceUrl.default",
 config.getServerLists());
-        ApplicationInfoManager applicationInfoManager = 
initializeApplicationInfoManager(new MyDataCenterInstanceConfig());
-        eurekaClient = new DiscoveryClient(applicationInfoManager, new 
DefaultEurekaClientConfig());
-        eurekaHttpClient = new JerseyApplicationClient(new 
ApacheHttpClient4(), config.getServerLists(), null);
-    }
-
-    private ApplicationInfoManager initializeApplicationInfoManager(final 
EurekaInstanceConfig instanceConfig) {
-        InstanceInfo instanceInfo = new 
EurekaConfigBasedInstanceInfoProvider(instanceConfig).get();
-        return new ApplicationInfoManager(instanceConfig, instanceInfo);
+        eurekaInstanceConfig = new MyDataCenterInstanceConfig();
+        eurekaClientConfig = new DefaultEurekaClientConfig() {
+            @Override
+            public List<String> getEurekaServerServiceUrls(final String zone) {
+                return Arrays.asList(config.getServerLists().split(","));
+            }
+        };
     }
 
     @Override
     public void persistInstance(final InstanceEntity instance) {
-        EurekaHttpResponse<Void> register = 
eurekaHttpClient.register(generateInstanceInfo(instance));
-        LOGGER.info("eureka client register success: {}", 
register.getEntity());
-    }
-
-    private InstanceInfo generateInstanceInfo(final InstanceEntity instance) {
-        return InstanceInfo.Builder.newBuilder()
-                .setAppName(instance.getAppName())
-                .setIPAddr(IpUtils.getHost())
+        InstanceInfo.Builder instanceInfoBuilder = instanceInfoBuilder();
+        instanceInfoBuilder.setAppName(instance.getAppName())
+                .setIPAddr(instance.getHost())
                 .setHostName(instance.getHost())
                 .setPort(instance.getPort())
-                .setDataCenterInfo(new 
MyDataCenterInfo(DataCenterInfo.Name.MyOwn))
-                .build();
+                .setStatus(InstanceInfo.InstanceStatus.UP);
+        InstanceInfo instanceInfo = instanceInfoBuilder.build();
+        LeaseInfo.Builder leaseInfoBuilder = LeaseInfo.Builder.newBuilder()
+                
.setRenewalIntervalInSecs(eurekaInstanceConfig.getLeaseRenewalIntervalInSeconds())
+                
.setDurationInSecs(eurekaInstanceConfig.getLeaseExpirationDurationInSeconds());
+        instanceInfo.setLeaseInfo(leaseInfoBuilder.build());
+        ApplicationInfoManager applicationInfoManager = new 
ApplicationInfoManager(eurekaInstanceConfig, instanceInfo);
+        eurekaClient = new DiscoveryClient(applicationInfoManager, 
eurekaClientConfig);
+    }
+
+    /**
+     * Gets the instance information from the config instance and returns it 
after setting the appropriate status.
+     * ref: 
com.netflix.appinfo.providers.EurekaConfigBasedInstanceInfoProvider#get
+     *
+     * @return InstanceInfo instance to be registered with eureka server
+     */
+    public InstanceInfo.Builder instanceInfoBuilder() {
+        // Build the lease information to be passed to the server based on 
config
+        if (vipAddressResolver == null) {
+            vipAddressResolver = new Archaius1VipAddressResolver();
+        }
+
+        // Builder the instance information to be registered with eureka server
+        final InstanceInfo.Builder builder = 
InstanceInfo.Builder.newBuilder(vipAddressResolver);
+
+        // set the appropriate id for the InstanceInfo, falling back to 
datacenter Id if applicable, else hostname
+        String instanceId = eurekaInstanceConfig.getInstanceId();
+        if (instanceId == null || instanceId.isEmpty()) {
+            DataCenterInfo dataCenterInfo = 
eurekaInstanceConfig.getDataCenterInfo();
+            if (dataCenterInfo instanceof UniqueIdentifier) {
+                instanceId = ((UniqueIdentifier) dataCenterInfo).getId();
+            } else {
+                instanceId = eurekaInstanceConfig.getHostName(false);
+            }
+        }
+
+        String defaultAddress;
+        if (eurekaInstanceConfig instanceof RefreshableInstanceConfig) {
+            // Refresh AWS data center info, and return up to date address
+            defaultAddress = ((RefreshableInstanceConfig) 
eurekaInstanceConfig).resolveDefaultAddress(false);
+        } else {
+            defaultAddress = eurekaInstanceConfig.getHostName(false);
+        }
+
+        // fail safe
+        if (defaultAddress == null || defaultAddress.isEmpty()) {

Review Comment:
   same



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to