У меня стандартный сервис Spring Boot Eureka. Регистрация на Eureka осуществляется из коробки с Spring Boot Services. Однако мне нужно включить регистрацию в сервисе OpenLiberty. В качестве примера я использую следующий проект https://github.com/Netflix/eureka/tree/master/eureka-examples. В основном я сделал копию ExampleServiceBase.java и слегка измененный ExampleEurekaService.java.
EurekaRegistration.java:
@Singleton
@Startup
public class EurekaRegistration {
private static final Logger logger = LoggerFactory.getLogger(EurekaRegistration.class);
@Inject
private EurekaService eurekaService;
@PostConstruct
public void init() {
eurekaService.register();
}
@PreDestroy
public void destroy() {
eurekaService.stop();
}
}
EurekaService.java:
package io.openliberty.sample.eureka;
import com.netflix.appinfo.ApplicationInfoManager;
import com.netflix.appinfo.EurekaInstanceConfig;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.appinfo.MyDataCenterInstanceConfig;
import com.netflix.appinfo.providers.EurekaConfigBasedInstanceInfoProvider;
import com.netflix.config.DynamicPropertyFactory;
import com.netflix.discovery.DefaultEurekaClientConfig;
import com.netflix.discovery.DiscoveryClient;
import com.netflix.discovery.EurekaClient;
import com.netflix.discovery.EurekaClientConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class EurekaService {
private static final Logger logger = LoggerFactory.getLogger(EurekaService.class);
private ApplicationInfoManager applicationInfoManager;
private EurekaClient eurekaClient;
private ExampleServiceBase exampleServiceBase;
private synchronized ApplicationInfoManager initializeApplicationInfoManager(EurekaInstanceConfig instanceConfig) {
if (applicationInfoManager == null) {
InstanceInfo instanceInfo = new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get();
applicationInfoManager = new ApplicationInfoManager(instanceConfig, instanceInfo);
}
return applicationInfoManager;
}
private synchronized EurekaClient initializeEurekaClient(ApplicationInfoManager applicationInfoManager, EurekaClientConfig clientConfig) {
if (eurekaClient == null) {
eurekaClient = new DiscoveryClient(applicationInfoManager, clientConfig);
}
return eurekaClient;
}
public void register() {
DynamicPropertyFactory configInstance = com.netflix.config.DynamicPropertyFactory.getInstance();
ApplicationInfoManager applicationInfoManager = initializeApplicationInfoManager(new MyDataCenterInstanceConfig());
EurekaClient eurekaClient = initializeEurekaClient(applicationInfoManager, new DefaultEurekaClientConfig());
exampleServiceBase = new ExampleServiceBase(applicationInfoManager, eurekaClient, configInstance);
try {
exampleServiceBase.start();
} catch (Exception e){
logger.error("Error while registering to Eureka Service", e);
exampleServiceBase.stop();
}
}
public void stop() {
exampleServiceBase.stop();
}
}
Когда я запускаю приложение, в консоль выводится следующая ошибка:
[INFO] URL-адреса не будут опрашиваться как источники динамической конфигурации. [INFO] Чтобы включить URL-адреса в качестве источников динамической конфигурации, определите системное свойство archaius.configurationSource.additionalUrls или сделайте config.properties доступным по classpath.
Где я должен установить " archaius.configurationSource.additionalUrls " свойство? в pom.xml как запись? какой тогда будет формат? Все свойства, связанные с eureka, находятся в стандартном файле Openliberty microprofile-config.properties .
ОБНОВЛЕНИЕ 2019-10-25 Возможно, вопрос будет - как сделать это свойствофайл доступен на пути к классам OpenLiberty?