Доступ к предоставляемым пользователем сервисам CloudFoundry с помощью коннекторов Spring Cloud

Я пытаюсь использовать Spring Cloud для использования общей службы REST из приложения Cloud Foundry.

Эта служба создается с использованием Spring Boot следующим образом:

package com.something;

@RestController
public class DemoServiceController {
    @RequestMapping("/sayHi")
    public String sayHi() {
        return "Hello!";
    }
}

Это прекрасно работает — я могу получить доступ к http://www.example.com/srv/demo/sayHi и получить «Привет!» назад.

Затем я создал предоставленный пользователем экземпляр службы с помощью CF-CLI и привязал его к своему приложению. Теперь я вижу связанную службу в VCAP_SERVICES.

cf cups my-demo-service -p '{"url":"http://www.example.com/srv/demo/"}'
cf bs my-demo-app my-demo-service

Далее, как описано здесь, я добавил этот bean-компонент в конфигурацию Spring моего приложения, установив connector-type на мой исходный контроллер (у меня также есть ссылка на него).

<cloud:service id="myDemoService"
               service-name="my-demo-service"
               connector-type="com.something.DemoServiceController"
               />

Теперь, когда я автоматически подключаю "myDemoService" к своему приложению,

@Autowired
private DemoController myDemoService;

Я получаю сообщение об ошибке:

Службы указанного типа не найдены.

Я включил все необходимые зависимости, включая spring-cloud-spring-service-connector и spring-cloud-cloudfoundry-connector.

Что здесь не так? Я даю неправильные параметры bean-компонента? Любая помощь горячо приветствуется.


person metacubed    schedule 17.02.2015    source источник
comment
Можете ли вы попробовать обычный сервис, а не сервис, предоставляемый пользователем? Просто хочу попытаться изолировать, связана ли проблема с обоими видами услуг.   -  person Jeff Sloyer    schedule 17.02.2015
comment
@JeffSloyer Это все равно должен быть пользовательский сервис. Все встроенные имеют определенные аннотации в spring-cloud-connectors.   -  person metacubed    schedule 17.02.2015
comment
Это нормально, я просто хотел проверить, связано ли это с услугой, предоставляемой пользователем, или с обычной услугой. Можете ли вы попробовать обычный сервис и посмотреть, будет ли поведение таким же?   -  person Jeff Sloyer    schedule 18.02.2015


Ответы (1)


Spring Cloud Connectors не будет знать, что делать с этой службой, поскольку каждая поддерживаемая служба должна быть известного типа (MySQL, Postgres, Redis, MongoDB, RabbitMQ и т. д.). Установка connector-type для вашего класса контроллера не будет делать то, что вы хотите.

Что вам нужно сделать, так это создать собственное расширение Connectors. Вот пример проекта, который делает это: https://github.com/cf-platform-eng/spring-boot-cities.

person Scott Frederick    schedule 17.02.2015