我正在尝试使用 rabbitmq 使用 spring cloud stream 构建一个事件驱动的微服务。就我而言,rabbitmq 在 docker 中运行。
用于在容器下运行的 Docker 命令
docker run -d --hostname my-rabbit --name some-rabbit --publish 15672:15672 rabbitmq:3
然后进入容器的 bash 模式,我在下面的命令中解雇了:
rabbitmq-plugins 启用 rabbitmq_management
为了启动management-plugin
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b2bc315c44aa rabbitmq:3 "docker-entrypoint..." 7 minutes ago Up 7 minutes 4369/tcp, 5671-5672/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp some-rabbit
所以我可以从 localhost:15672
上的浏览器访问 docker
但是当我启动 Spring Boot 应用程序时,它没有进行队列和交换。请检查堆栈跟踪。
堆栈跟踪
o.s.i.codec.kryo.CompositeKryoRegistrar : configured Kryo registration [40, java.io.File] with serializer org.springframework.integration.codec.kryo.FileSerializer
o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'rabbitConnectionFactory' has been autodetected for JMX exposure
o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'integrationMbeanExporter' has been autodetected for JMX exposure
o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'integrationMbeanExporter': registering with JMX server as MBean [org.springframework.integration.monitor:name=integrationMbeanExporter,type=IntegrationMBeanExporter]
o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'rabbitConnectionFactory': registering with JMX server as MBean [org.springframework.amqp.rabbit.connection:name=rabbitConnectionFactory,type=CachingConnectionFactory]
o.s.i.monitor.IntegrationMBeanExporter : Registering beans for JMX exposure on startup
o.s.i.monitor.IntegrationMBeanExporter : Registering MessageChannel nullChannel
o.s.i.monitor.IntegrationMBeanExporter : Located managed bean 'org.springframework.integration:type=MessageChannel,name=nullChannel': registering with JMX server as MBean [org.springframework.integration:type=MessageChannel,name=nullChannel]
o.s.i.monitor.IntegrationMBeanExporter : Registering MessageChannel output
o.s.i.monitor.IntegrationMBeanExporter : Located managed bean 'org.springframework.integration:type=MessageChannel,name=output': registering with JMX server as MBean [org.springframework.integration:type=MessageChannel,name=output]
o.s.i.monitor.IntegrationMBeanExporter : Registering MessageChannel errorChannel
o.s.i.monitor.IntegrationMBeanExporter : Located managed bean 'org.springframework.integration:type=MessageChannel,name=errorChannel': registering with JMX server as MBean [org.springframework.integration:type=MessageChannel,name=errorChannel]
o.s.i.monitor.IntegrationMBeanExporter : Registering MessageHandler errorLogger
o.s.i.monitor.IntegrationMBeanExporter : Located managed bean 'org.springframework.integration:type=MessageHandler,name=errorLogger,bean=internal': registering with JMX server as MBean [org.springframework.integration:type=MessageHandler,name=errorLogger,bean=internal]
o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase -2147482648
r.t.b.demo.source.GatewayApplication : No active profile set, falling back to default profiles: default
s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@56cfe111: startup date [Mon May 29 15:07:40 JST 2017]; parent: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4fe767f3
o.s.c.support.GenericApplicationContext : Refreshing org.springframework.context.support.GenericApplicationContext@67de7a99: startup date [Mon May 29 15:07:40 JST 2017]; root of context hierarchy
r.t.b.demo.source.GatewayApplication : Started GatewayApplication in 0.189 seconds (JVM running for 10.957)
o.s.amqp.rabbit.core.RabbitAdmin : Failed to declare exchange: Exchange [name=output, type=topic, durable=true, autoDelete=false, internal=false, arguments={}], continuing... org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused
o.s.integration.channel.DirectChannel : Channel 'gateway:8181.output' has 1 subscriber(s).
o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0
o.s.i.endpoint.EventDrivenConsumer : Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
o.s.i.channel.PublishSubscribeChannel : Channel 'gateway:8181.errorChannel' has 1 subscriber(s).
o.s.i.endpoint.EventDrivenConsumer : started _org.springframework.integration.errorLogger
o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 2147482647
o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 2147483647
s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8181 (http)
提前致谢。
最佳答案
您需要为具有管理插件的 RabbitMQ 使用 Docker 镜像(请参阅 https://hub.docker.com/_/rabbitmq/),在您的情况下为 rabbitmq:3-management
。
关于docker 中 rabbitmq 的 Spring Boot 应用程序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44233562/