Несколько Spring Cloud Service Connector для одной службы - PullRequest
0 голосов
/ 06 марта 2019

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

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

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

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 или поиск того, который я запрашивал, не так ли?

...