2

Ich habe 3 Projekte: Ein hystrix Armaturenbrett, ein Turbinen Server (unter Verwendung von AMQP) und eine APITurbine nur ein Host finden können, wenn Docker mit

Als ich in der Entwicklung env beginnen, richte ich zwei Instanzen der API (über Port 8080 und 8081). Um die Aggregation der Turbine zu testen, mache ich Anrufe und im Dashboard sehe ich Hosts: 2.
Obwohl, wenn ich Docker verwende, selbst wenn der Load Balancer den 2 Server erreicht, sehe ich nur einen Host auf dem Hystrix Dashboard.

Meine Annahmen:
1- als beide Behälter auf dem gleichen Port (8080) beginnen, sieht Turbine sie als eine
2- als auch ich RabbitMQ dockerize, dies verursacht hier

Probleme werden

meine ist docker-compose.yml Datei

version: '2' 
    services: 
     postgres: 
     image: postgres:9.5 
     ports: 
      - "5432" 
     environment: 
      POSTGRES_PASSWORD: postgres 
      POSTGRES_USER: postgres 
      POSTGRES_DB: fq 
     volumes: 
      - /var/lib/postgresql 

     rabbitmq: 
     image: rabbitmq:3-management 
     ports: 
      - "5672" 
      - "15672" 
     environment: 
      RABBITMQ_DEFAULT_USER: turbine 
      RABBITMQ_DEFAULT_PASS: turbine 
     volumes: 
      - /var/lib/rabbitmq/ 

     hystrix: 
     build: hystrixdashboard/. 
     links: 
      - turbine_server 
     ports: 
      - "8989:8989" 

     turbine_server: 
     build: turbine/. 
     links: 
      - rabbitmq 
     ports: 
      - "8090:8090" 

     persona_api: 
     build: persona/. 
     ports: 
      - "8080" 
     links: 
      - postgres 
      - rabbitmq 

     lb: 
     image: 'dockercloud/haproxy:1.5.1' 
     links: 
      - persona_api 
     volumes: 
      - /var/run/docker.sock:/var/run/docker.sock 
     ports: 
      - 80:80 

meine persona_api Konfigurationsdatei

spring: 
    application: 
    name: persona_api 
    profiles: 
    active: dev 
    rabbitmq: 
    addresses: 127.0.0.1:5672 
    username: turbine 
    password: turbine 
    useSSL: false 

server: 
    compression.enabled: true 
    port: ${PORT:8080} 

params: 
    datasource: 
    driverClassName: org.postgresql.Driver 
    username: postgres 
    password: postgres 
    maximumPoolSize: 10 
    poolName: fq_connection_pool 

spring.jpa: 
    show-sql: true 
    hibernate: 
    ddl-auto: update 

turbine: 
    aggregator: 
    clusterConfig: persona_api 
    appConfig: persona_api 

--- 

spring: 
    profiles: dev 

params: 
    datasource: 
    jdbcUrl: jdbc:postgresql://127.0.0.1:5432/fq 
--- 

spring: 
    profiles: docker 
    rabbitmq: 
    addresses: rabbitmq:5672 

params: 
    datasource: 
    jdbcUrl: jdbc:postgresql://postgres:5432/fq 

Ich fürchte, wenn ich es in der Produktion (auf Rancher oder Docker Cloud) bereitstellen, sehe ich das gleiche Problem.

hier ist ein GIF von dem, was geschieht, wenn ich zwei APIs eingerichtet laden ausgewogene

enter image description here

Antwort

0

ich Ihr Problem zu tun nehmen ist die RabbitMQ Verbindung Sie verwenden. Weil die Verbindungszeichenfolge, die Sie verwenden, localhost ist, aber abgesehen von dem RabbitMQ-Container auf keinem ist die Verbindung auf localhost verfügbar. Ich schlage vor, dass Sie den Rabbit-Host mithilfe von Umgebungsvariablen in Ihre Spring-Verbindung injizieren. Wenn ich Ihre Dateien richtig gelesen habe, sollte es ${RABBITMQ_PORT_5672_TCP_ADDR} anstelle von localhost sein. Aber sei dir bewusst, dass ich es nicht versuchen könnte. Es ist nur eine fundierte Schätzung. Besser du verdoppelst dich, indem du einen env innerhalb deines persona_api Containers tust, wenn alles läuft.

+0

Ich habe vielleicht die ganze config verpasst: eigentlich, in der application.yml habe ich einen Eintrag für dockerized rabbitmq mit dem Springprofil "docker" und der Einstiegspunkt meiner persona_api ist 'ENTRYPOINT [" java "," - Djava.security.egd = file:/dev /./ urandom "," - Dspring.profiles.active = docker "," - jar ","/app.jar "]] also zeige ich nach rechts Ress ... I –

+0

Ahh Entschuldigung, die Konfiguration wurde abgeschnitten. Können Sie überprüfen, ob Rabbit alle Clients sieht, um festzustellen, ob das Problem mit dem Herstellen einer Verbindung oder einer Berichterstellung verbunden ist? –

+0

Ich benutze den gleichen Benutzernamen für alle Verbindungen ('Turbine') und ich kann 3 Verbindungen auf RabbitMQ sehen, aber die Kanäle scheint seltsam, denke ich: https://i.imgur.com/4WmeW11.png sollte nicht Ich sehe nur einen Kanal? und sie teilen diesen Kanal, alle Server? Für die Warteschlangen habe ich nur einen: springCloudHystrixStream.xxxxxx –

1

Versuch:

hystrix.stream.queue.send-id=false 

in Ihrem API

0

Es soll das Problem behoben werden.

eureka: 
    instance: 
    prefer-ip-address: true 
    instance-id: ${spring.cloud.client.ipAddress}:${server.port} #make the application unique on the rancher service layer 
spring: 
    application: 
    index: ${random.uuid} #make the application unique on the rancher containe layer,same service but with multi-instances. 

https://github.com/spring-cloud/spring-cloud-netflix/issues/740

benötigen instanz ID: $ {spring.cloud.client.ipAddress}: $ {} server.port und Index: $ {} random.uuid sowohl