5

Я разрабатываю приложение для микросервисов Spring Cloud Eureka. Я хочу, чтобы мои службы подключались к сервису конфигурации через первый подход Eureka. Микросервисы упаковываются в контейнеры для докеров и развертываются через докеры. Приложение состоит из:Spring Cloud Конфигурация Eureka-первый подход не работает

  1. myapp-service-registry: служба реестра сервис, реализованный с Spring Cloud Eureka
  2. myapp-config-service: обслуживание сервера родника Облако конфигурации
  3. myapp-service-test: пример microservice, который должен попытаться взять свои данные конфигурации из службы конфигурации, подключившись к ней с помощью подхода Eureka-first.

Ошибка подключения к службе конфигурации, как описано ниже. Прежде всего, некоторые данные конфигурации:

Вот myapp-service-registry 's application.yml:

server: 
    port: ${PORT:8761} 

eureka: 
    client: 
    registerWithEureka: false 
    fetchRegistry: false 
    server: 
    waitTimeInMsWhenSyncEmpty: 0 

Здесь myapp-config-service' s application.yml:

server: 
    port: ${MYAPP_CONFIG_SERVICE_PORT:8888} 

spring: 
    cloud: 
    config: 
     server: 
     git: 
      uri: ${MYAPP_CONFIG_SERVICE_GIT_URI} 
    config: 
    name: myapp-config-service 

# eureka service registry client 

eureka: 
    client: 
     serviceUrl: 
      defaultZone: http://${SERVICE_REGISTRY_HOST}:${SERVICE_REGISTRY_PORT}/eureka/ 
    instance: 
     preferIpAddress: true 

Config сервера и клиента инициализируются в configserver-eureka и eureka-first образцы в https://github.com/spring-cloud-samples/tests:

myapp-config-service 's bootstrap.yml является:

spring: 
    application: 
     name: myapp-config-service 
    cloud: 
     config: 
      discovery: 
       enabled: true 

И myapp-service-test' s application.yml:

eureka: 
    client: 
     serviceUrl: 
      defaultZone: http://${SERVICE_REGISTRY_HOST}:${SERVICE_REGISTRY_PORT}/eureka/ 
    instance: 
     preferIpAddress: true 

И myapp-service-test «s bootstrap.yml:

spring: 
    application: 
    name: myapp-service-test 
    cloud: 
    config: 
     discovery: 
     enabled: true 
     serviceId: myapp-config-service 

Ниже переменная docker-compose.yml (окр заменяются фактические значения при запуске):

myapp-service-registry: 
image: myapp/myapp-service-registry:0.0.1 
ports: 
    - ${EUREKA_PORT}:${EUREKA_PORT} 

# myapp-config-service 

myapp-config-service: 
    image: myapp/myapp-config-service:0.0.1 
    volumes: 
    - ${MYAPP_DATA_FOLDER}/config:/var/opt/myapp/config 
    environment: 
     MYAPP_CONFIG_SERVICE_PORT: ${MYAPP_CONFIG_SERVICE_PORT} 
     SERVICE_REGISTRY_HOST: ${MYAPP_STAGING_IP} 
     SERVICE_REGISTRY_PORT: ${EUREKA_PORT} 
     MYAPP_CONFIG_SERVICE_GIT_URI: ${MYAPP_CONFIG_SERVICE_GIT_URI} 
    ports: 
     - ${MYAPP_CONFIG_SERVICE_PORT}:${MYAPP_CONFIG_SERVICE_PORT} 

# myapp-service-test 

myapp-service-test: 
    image: myapp/myapp-service-test:0.0.1 
    environment: 
    SERVICE_REGISTRY_HOST: ${MYAPP_STAGING_IP} 
    SERVICE_REGISTRY_PORT: ${EUREKA_PORT} 
    ports: 
    - ${MYAPP_SERVICE_TEST_TWO_PORT}:8080 

Я могу проверить, работает ли Eureka, подключив браузер к http://[...MACHINE-IP...]:8761/ и увидев приборную панель Eureka. Аналогично, я тестирую, что служба конфигурации работает и отвечает на http:///[...MACHINE-IP...]:8888/myapp-config-service; При вышеуказанной конфигурации, с другой стороны, MyApp-сервис-тест происходит сбой при запуске с следующим журналом:

-02-03 08:26:45.191 INFO 1 --- [   main] e.f.s.two.TestServiceApplication  : Starting TestServiceApplication v0.0.1 on b1bc37422027 with PID 1 (/app.jar started by root in /) 
2016-02-03 08:26:45.223 INFO 1 --- [   main] e.f.s.two.TestServiceApplication  : No active profile set, falling back to default profiles: default 
2016-02-03 08:26:45.448 INFO 1 --- [   main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.spring[email protected]4d97e82d: startup date [Wed Feb 03 08:26:45 UTC 2016]; root of context hierarchy 
2016-02-03 08:26:46.382 INFO 1 --- [   main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 
2016-02-03 08:26:46.442 INFO 1 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [class org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$6b65138e] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2016-02-03 08:26:47.089 INFO 1 --- [   main] o.s.c.n.eureka.InstanceInfoFactory  : Setting initial instance status as: STARTING 
2016-02-03 08:26:48.231 INFO 1 --- [   main] c.n.d.provider.DiscoveryJerseyProvider : Using encoding codec LegacyJacksonJson 
2016-02-03 08:26:48.237 INFO 1 --- [   main] c.n.d.provider.DiscoveryJerseyProvider : Using decoding codec LegacyJacksonJson 
2016-02-03 08:26:49.171 INFO 1 --- [   main] c.n.d.provider.DiscoveryJerseyProvider : Using encoding codec LegacyJacksonJson 
2016-02-03 08:26:49.171 INFO 1 --- [   main] c.n.d.provider.DiscoveryJerseyProvider : Using decoding codec LegacyJacksonJson 
2016-02-03 08:26:49.496 INFO 1 --- [   main] com.netflix.discovery.DiscoveryClient : Disable delta property : false 
2016-02-03 08:26:49.497 INFO 1 --- [   main] com.netflix.discovery.DiscoveryClient : Single vip registry refresh property : null 
2016-02-03 08:26:49.497 INFO 1 --- [   main] com.netflix.discovery.DiscoveryClient : Force full registry fetch : false 
2016-02-03 08:26:49.498 INFO 1 --- [   main] com.netflix.discovery.DiscoveryClient : Application is null : false 
2016-02-03 08:26:49.502 INFO 1 --- [   main] com.netflix.discovery.DiscoveryClient : Registered Applications size is zero : true 
2016-02-03 08:26:49.503 INFO 1 --- [   main] com.netflix.discovery.DiscoveryClient : Application version is -1: true 
2016-02-03 08:26:49.503 INFO 1 --- [   main] com.netflix.discovery.DiscoveryClient : Getting all instance registry info from the eureka server 
2016-02-03 08:26:49.720 WARN 1 --- [   main] com.netflix.discovery.DiscoveryClient : Can't get a response from http://localhost:8761/eureka/apps/ 
<...> 
com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused 
    at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.jar!/:1.19] 
    at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.jar!/:1.19] 
    at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.3.4.jar!/:1.3.4] 
    <...> 
Caused by: java.net.ConnectException: Connection refused 
    at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_66-internal] 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_66-internal] 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_66-internal] 
    <...> 

2016-02-03 08:26:49.747 ERROR 1 --- [   main] com.netflix.discovery.DiscoveryClient : Can't contact any eureka nodes - possibly a security group issue? 

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused 
    <...> 

2016-02-03 08:26:49.770 ERROR 1 --- [   main] com.netflix.discovery.DiscoveryClient : DiscoveryClient_MYAPP-SERVICE-TEST/b1bc37422027:myapp-service-test - was unable to refresh its cache! status = java.net.ConnectException: Connection refused 

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused 
    <...> 

2016-02-03 08:26:49.785 WARN 1 --- [   main] com.netflix.discovery.DiscoveryClient : Using default backup registry implementation which does not do anything. 
2016-02-03 08:26:49.810 INFO 1 --- [   main] com.netflix.discovery.DiscoveryClient : Starting heartbeat executor: renew interval is: 10 
2016-02-03 08:26:49.818 INFO 1 --- [   main] c.n.discovery.InstanceInfoReplicator  : InstanceInfoReplicator onDemand update allowed rate per min is 4 
2016-02-03 08:26:50.443 WARN 1 --- [   main] lientConfigServiceBootstrapConfiguration : Could not locate configserver via discovery 

java.lang.RuntimeException: No matches for the virtual host name :myapp-config-service 
    at com.netflix.discovery.DiscoveryClient.getNextServerFromEureka(DiscoveryClient.java:782) ~[eureka-client-1.3.4.jar!/:1.3.4] 
    at org.springframework.cloud.netflix.config.DiscoveryClientConfigServiceBootstrapConfiguration.refresh(DiscoveryClientConfigServiceBootstrapConfiguration.java:71) [spring-cloud-netflix-core-1.1.0.M3.jar!/:1.1.0.M3] 
    <...> 

2016-02-03 08:26:50.470 INFO 1 --- [   main] e.f.s.two.TestServiceApplication  : Started TestServiceApplication in 7.101 seconds (JVM running for 9.329) 

    . ____   _   __ _ _ 
/\\/___'_ __ _ _(_)_ __ __ _ \ \ \ \ 
(()\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 
\\/ ___)| |_)| | | | | || (_| | )))) 
    ' |____| .__|_| |_|_| |_\__, |//// 
=========|_|==============|___/=/_/_/_/ 
:: Spring Boot ::  (v1.3.1.RELEASE) 

2016-02-03 08:26:50.773 INFO 1 --- [   main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://localhost:8888 
2016-02-03 08:26:51.015 WARN 1 --- [   main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://localhost:8888/myapp-service-test/default":Connection refused; nested exception is java.net.ConnectException: Connection refused 

<...> 

2016-02-03 08:26:54.856 ERROR 1 --- [pool-5-thread-1] com.netflix.discovery.DiscoveryClient : Can't contact any eureka nodes - possibly a security group issue? 

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused 
    <...> 

2016-02-03 08:26:57.272 WARN 1 --- [   main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testTwoServiceController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: java.lang.String myapp.services.two.TestServiceController.message; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'message' in string value "${message}" 
2016-02-03 08:26:57.281 INFO 1 --- [   main] o.apache.catalina.core.StandardService : Stopping service Tomcat 
2016-02-03 08:26:57.299 ERROR 1 --- [   main] o.s.boot.SpringApplication    : Application startup failed 

Обратите внимание, что если я не реализовать Эврика-первый подход (и набор spring.cloud. config.uri непосредственно в службе bootstrap.yml), служба регистрируется в Eureka, находит конфигурационный сервер и работает правильно (я могу видеть зарегистрированную службу на информационной панели Eureka и проверить, правильно ли они настроены свойства конфигурации).

+0

Вам нужен eureka serviceUrl в bootstrap.yml, не так ли (как и служебный идентификатор конфигурационного сервера)? –

+0

Вот и все! Перемещая конфигурацию eureka в myapp-service-test из application.yml в bootstrap.yml, служба правильно находит все. Подумайте об этом, это вполне логично ...Я пропустил его, так как в первой версии службы тестовой службы (без сервера конфигурации) регистрация eureka работала, если была настроена в application.yml. Тогда я просто не заметил, что то же самое нужно перенести в boostrap.yml, так как там я сконфигурировал файл spring.cloud.config.discovery. Большое спасибо, – chrx

+0

Какую версию весны вы использовали, чтобы заставить ее работать? Я могу заставить его работать с Spring Boot: 1.3.1.RELEASE и Cloud: Brixton.BUILD-SNAPSHOT, но есть ли установка RELEASE (не SNAPSHOT), которая работает? – Rob

ответ

8

Вам нужна служба eurekaUrl в bootstrap.yml (а также служебный идентификатор конфигурационного сервера).

+0

Не могли бы вы показать обновленную конфигурацию? – islandguy

Смежные вопросы