काम नहीं कर रहा है मैं एक स्प्रिंग क्लाउड यूरेका माइक्रोस्कोर्सेस एप्लिकेशन विकसित कर रहा हूं। मैं चाहता हूं कि मेरी सेवाएं यूरेका-प्रथम दृष्टिकोण के माध्यम से कॉन्फ़िगर सेवा से कनेक्ट हों। माइक्रोस्कोर्सेस को डॉकर कंटेनर के रूप में पैक किया जाता है और डॉकर-कंपोज़ के माध्यम से तैनात किया जाता है। आवेदन द्वारा रचित है:स्प्रिंग क्लाउड कॉन्फ़िगर यूरेका- पहला दृष्टिकोण
myapp-service-registry
: एक सेवा रजिस्ट्री सेवा स्प्रिंग बादल यूरेकाmyapp-config-service
के साथ लागू किया: एक स्प्रिंग बादल कॉन्फ़िगर सेवा सर्वरmyapp-service-test
: एक उदाहरण microservice जो अपने config डेटा लेने के लिए प्रयास करना चाहिए यूरेका-प्रथम दृष्टिकोण के माध्यम से इसे कनेक्ट करके कॉन्फ़िगर सेवा से।
कॉन्फ़िगरेशन सेवा का कनेक्शन नीचे वर्णित के रूप में विफल रहता है। कुछ सब विन्यास डेटा की पहली:
यहाँ myapp-service-registry
है की application.yml
:
server:
port: ${PORT:8761}
eureka:
client:
registerWithEureka: false
fetchRegistry: false
server:
waitTimeInMsWhenSyncEmpty: 0
यहाँ myapp-config-service
के 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
कॉन्फ़िग सर्वर और ग्राहक configserver-eureka
और eureka-first
में के रूप में प्रारंभ कर रहे हैं https://github.com/spring-cloud-samples/tests में नमूने:
myapp-config-service
के bootstrap.yml
है:
spring:
application:
name: myapp-config-service
cloud:
config:
discovery:
enabled: true
और myapp-service-test
के application.yml
:
eureka:
client:
serviceUrl:
defaultZone: http://${SERVICE_REGISTRY_HOST}:${SERVICE_REGISTRY_PORT}/eureka/
instance:
preferIpAddress: true
और myapp-service-test
के bootstrap.yml
:
spring:
application:
name: myapp-service-test
cloud:
config:
discovery:
enabled: true
serviceId: myapp-config-service
बाद docker-compose.yml
(env चर के साथ बदल रहे हैं लॉन्च पर वास्तविक मूल्य):
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
मैं जांच सकता हूं कि यूरेका ब्राउज़र को http://[...MACHINE-IP...]:8761/ पर कनेक्ट करके और यूरेका डैशबोर्ड को देखकर काम कर रहा है। इसी तरह, मैं परीक्षण करता हूं कि कॉन्फ़िगर सेवा काम कर रही है और 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
में), सेवा यूरेका को पंजीकृत करती है, कॉन्फ़िगरेशन सर्वर पाती है और सही तरीके से काम करती है (मैं यूरेका के डैशबोर्ड में पंजीकृत सेवा देख सकता हूं और जांच सकता हूं कि कॉन्फ़िगरेशन गुण सही ढंग से पढ़े जाते हैं)।
आपको bootstrap.yml में यूरेका सेवा यूआरएल की आवश्यकता है (साथ ही कॉन्फ़िगरर की सेवा आईडी)? –
वह था! Application.yml से bootstrap.yml में myapp-service-test में यूरेका कॉन्फ़िगरेशन को स्थानांतरित करके सेवा सही ढंग से सब कुछ पाती है। इसके बारे में सोचने के लिए आओ, यह काफी तार्किक है ...मैंने टेस्ट सर्विस (बिना कॉन्फ़िगर सर्वर के) के सेवा के पहले संस्करण में इसे याद किया, यूरेका पंजीकरण application.yml में कॉन्फ़िगर किए जाने पर काम करता है। तब मैंने अभी ध्यान नहीं दिया कि इसे boostrap.yml में ले जाया जाना चाहिए क्योंकि यह वहां है कि मैंने spring.cloud.config.discovery को भी कॉन्फ़िगर किया है। बहुत धन्यवाद, – chrx
इस काम को पाने के लिए आपने स्प्रिंग का किस संस्करण का उपयोग किया था? मैं इसे स्प्रिंग बूट के साथ काम कर सकता हूं: 1.3.1.RELEASE और क्लाउड: ब्रिक्स्टन.बिल्ड-स्नैपशॉट लेकिन क्या कोई रिलीज (स्नैपशॉट नहीं) सेटअप है जो काम करता है? – Rob