Несколько Spring Cloud Service Connector для одной службы

Я построил два разных сервисных коннектора для одного сервиса. Если я добавлю оба служебных соединителя в свое приложение, Spring не начнет говорить, что не найдено подходящего служебного соединителя. Я отлаживал Spring и обнаружил, что только один из соединителей добавляется в список внутренних соединителей. Можно ли добавить два разных коннектора облачных сервисов spring для одного сервиса и использовать их в одном приложении?

Для лучшего понимания пример с сервисом rabbitMQ. Допустим, я создал два разных коннектора облачных сервисов с CloudFoundryServiceInfoCreator<AMQConnectionInfo> и CloudFoundryServiceInfoCreator<MQTTConnectionInfo>. Я хотел бы использовать оба соединителя в приложении (я знаю, что могу реализовать обе информации о соединении в одном облачном соединителе spring, но это не то, что я хотел бы делать).

редактировать: Возникает следующее исключение:

org.springframework.cloud.CloudException: No unique service matching class .... found. Expected 1, found 0
    at org.springframework.cloud.Cloud.getSingletonServiceConnector(Cloud.java:149)

Я также пытался использовать cloud.getServiceConnector(id, class, null);.

Я также только что обнаружил, что Spring Cloud Connectors просто возвращает первый Connector, найденный в этом методе в org.springframework.cloud.AbstractCloudConnector:

private ServiceInfo getServiceInfo(SD serviceData) {
        for (ServiceInfoCreator<? extends ServiceInfo,SD> serviceInfoCreator : serviceInfoCreators) {
            if (serviceInfoCreator.accept(serviceData)) {
                return serviceInfoCreator.createServiceInfo(serviceData);
            }
        }

        // Fallback with a warning
        ServiceInfo fallackServiceInfo = getFallbackServiceInfoCreator().createServiceInfo(serviceData);
        logger.warning("No suitable service info creator found for service " + fallackServiceInfo.getId()
                + " Did you forget to add a ServiceInfoCreator?");
        return fallackServiceInfo;
    }

Я думаю, было бы неплохо, если бы это вернуло список подходящих ServiceInfoCreator или ищет тот, который я запросил, не так ли?

Давайте начнем с простого вопроса: можете ли вы убедиться, что вы добавили оба служебных соединителя в соответствующие файлы служб, например. META-INF/services/org.springframework.cloud.cloudfoundry.Clo‌​udFoundryServiceInfo‌​Creator?

Scott Frederick 06.03.2019 21:45

да. Каждый коннектор реализован в собственном проекте (с использованием maven). Также каждый коннектор работает, если он один в пом "основного" приложения.

monti 06.03.2019 22:21
0
2
148
0

Другие вопросы по теме