Регистрация OpenLiberty в сервисе Spring Boot Eureka - PullRequest
0 голосов
/ 06 октября 2019

У меня стандартный сервис 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?

...