2017-08-17 2 views
0

je suivais cette documentation: http://cloud.spring.io/spring-cloud-consul/1.0.x/index.html et configuré ma demande de démarrage de printemps comme suit:Comment enregistrer correctement l'application Spring Boot (déployé Cloud Foundry) au Consul

spring: 
    cloud: 
    consul: 
     enabled: true 
     host: consul.domain.tld 
     port: 443 
     discovery: 
     instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}} 
     fail-fast: false 

Déployés Cloud Foundry, l'application peut se connecter au consul et tente de s'enregistrer, mais le «contrôle de service» du consul échoue instantanément.

lecture ce qui est configuré, je reçois les cas suivants dans l'application Boot Spring:

list = discoveryClient.getInstances("myApp"); 
list.get(0) => "http://05c81764-18a4-4905-41a8-b5b8:8080" 

Je vois que le UUID le plus est probablement la instanceId générée par Cloud Foundry. Bien sûr, cette URL ne fonctionne pas, ni dans Cloud Foundry ni pour un serveur Consul externe qui essaie de vérifier périodiquement la santé du service.

Comment dois-je configurer correctement mon application Spring Boot pour que l'enregistrement du service avec Consul fonctionne dans Cloud Foundry?

Répondre

1

Vous devez définir spring.cloud.consul.discovery.hostname sur une valeur renvoyée par la variable d'environnement vcap.

Quelque chose comme:

spring.cloud.consul.discovery.hostname=${vcap.application.uris[0]:localhost} 
spring.cloud.consul.discovery.port=80 
+0

Merci Spencer, '' hostname' et port' a fait l'affaire. – user3105453