我有3个项目:一个hystrix仪表板,一个涡轮机服务器(使用AMQP)和一个API
当我开始开发环境时,我设置了两个API实例(使用端口8080和8081)。为了测试涡轮机聚合,我进行了调用,在仪表板中,我可以看到Hosts: 2。
虽然当我使用Docker时,即使负载均衡器命中2个服务器,我也只能在hystrix仪表板上看到一个主机。
我的假设是:
1-由于两个容器开始于同一端口(8080),Turbine将它们视为一个
2-由于我还停靠了RabbitMQ,这可能会导致问题
这是我的docker-compose.yml文件
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我的persona_api配置文件
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我担心如果我将它部署到生产环境中(在Rancher或Docker云上),我会看到同样的问题。
下面是当我设置两个API负载均衡时发生的GIF

发布于 2017-01-25 21:56:35
尝试:
hystrix.stream.queue.send-id=false在你的API中
发布于 2016-06-21 02:50:05
我假设您的问题是您正在使用的RabbitMQ连接。因为您正在使用的连接字符串是本地主机,但实际上,除了RabbitMQ容器之外,本地主机上的连接将是可用的。我建议您使用环境变量将Rabbit主机注入到Spring连接中。如果我没看错的话,应该是${RABBITMQ_PORT_5672_TCP_ADDR}而不是localhost。但要知道我不能尝试。这只是一个有根据的猜测。当一切都在运行时,最好通过在persona_api容器中执行一个env来进行仔细检查。
发布于 2017-10-16 22:30:50
它应该解决你的问题。
eureka: instance: prefer-ip-address: true instance-id:${spring.cloud.client.ipAddress}:${server.port} #使应用程序在牧场机服务层唯一spring: application: index:${random.uuid} #使应用程序在牧场机连接器层唯一,相同的服务但具有多个实例。
https://github.com/spring-cloud/spring-cloud-netflix/issues/740
需要instance-id:${spring.cloud.client.ipAddress}:${server.port}和索引:${random.uuid}
https://stackoverflow.com/questions/37928016
复制相似问题