Java 使用docker时,Turbine只能找到一台主机
我有3个项目:hystrix仪表板、turbine服务器(使用AMQP)和API 在developmentenv中启动时,我设置了2个API实例(使用端口8080和8081)。要测试turbine聚合,我会打电话,在仪表板中可以看到Java 使用docker时,Turbine只能找到一台主机,java,spring-boot,turbine,spring-cloud-netflix,spring-cloud-stream,Java,Spring Boot,Turbine,Spring Cloud Netflix,Spring Cloud Stream,我有3个项目:hystrix仪表板、turbine服务器(使用AMQP)和API 在developmentenv中启动时,我设置了2个API实例(使用端口8080和8081)。要测试turbine聚合,我会打电话,在仪表板中可以看到Hosts:2 虽然当我使用Docker时,即使负载平衡器访问2服务器,我也只能在hystrix仪表板上看到一台主机 我的假设: 1-由于两个容器在同一端口(8080)上启动,Turbine将它们视为一个 2-由于我也对RabbitMQ进行了dockerize,这可能
Hosts:2
虽然当我使用Docker时,即使负载平衡器访问2服务器,我也只能在hystrix仪表板上看到一台主机 我的假设:
1-由于两个容器在同一端口(8080)上启动,Turbine将它们视为一个
2-由于我也对RabbitMQ进行了dockerize,这可能会导致问题 这是我的
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\u api
config文件
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
我假定您的问题是您正在使用的RabbitMQ连接。因为您正在使用的连接字符串是localhost,但实际上除了none上的RabbitMQ容器之外,该连接在localhost上是可用的。我建议您使用环境变量将Rabbit主机注入到Spring连接中。如果我正确读取了您的文件,它应该是
${RABBITMQ\u PORT\u 5672\u TCP\u ADDR}
,而不是localhost。但请注意,我无法尝试。这只是一个有根据的猜测。当一切都在运行时,最好在persona\u api容器中执行一个env
。尝试:
hystrix.stream.queue.send-id=false
在您的API中,应该解决您的问题
需要实例id:${spring.cloud.client.ipAddress}:${server.port}和index:${random.uuid}这两个我可能错过了整个配置:实际上,在application.yml中,我确实有一个使用spring概要文件“docker”的DockerRabbitMQ条目,我的persona_api的入口点是
入口点[“java”,“-Djava.security.egd=file:/dev//Uradom”,“-Dspring.profiles.active=docker”,“-jar”,“/app.jar”]
所以我指的是正确的地址……对不起,配置被切断了。你能检查Rabbit是否只看到所有客户端以确定问题是与连接有关还是只是报告有关。我对所有连接使用相同的用户名(turbour
),并且我可以在RabbitMQ上看到3个连接,但通道看起来很奇怪,我想:我不应该只看到一个通道吗?他们共享这个频道,所有的服务器?对于队列,我只有一个:springCloudHystrixStream.xxxxxx。这看起来很奇怪。但更让我担心的是,只有一个连接处于活动状态,而其他连接处于空闲状态。您是否检查了LB机构是否正常工作?我在classic Turbine上也遇到了类似的问题,因为没有流量就意味着没有hystrix.stream
。那些空闲的连接我猜是正常的……没有流量,连接就会空闲。我也赌LB…我会查一查让你知道
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.