在搭建springcloud微服务时,可以使用Turbine进行监控多个微服务,用dashboard展示数据。
不过在springboot1.5.x+springcloudEdgware版,使用消息中间间收集数据时会出现一个错误,导致Turbine整合rabbitmq项目无法运行。
错误信息:org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.cloud.netflix.turbine.stream.TurbineStreamConfiguration'; nested exception is java.net.BindException: Address already in use: bind
导致原因:Turbine整合rabbitmq时会启动一个Netty容器,并将server.port 设为-1 ,从而关闭Servlet容器,就会导致yml文件中server.port无法正常工作。
解决办法:修改yml文件
server:
port: 28031
spring:
application:
name: turbinservice
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
instance-id: ${spring.cloud.client.ipAddress}:28031
non-secure-port: 28031
management:
port: 20011
- 1.server.port尽量设置大一点,不然可能还是会报错
- 2.添加“non-secure-port:”该值与server.port的值一样
- 3.添加“management.port”该值设置一个随机数,尽量大一些,要与server.port的值不一样
注意:使用IDEA运行的话,需要设置端口不一样。
该方法可能只对springboot1.5.x+springcloud Edgware版有效,可能其他版本不会有这个整合的问题。
在贴出我turbine+rabbitmq的pom文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>