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]