当前位置: 首页 > 知识库问答 >
问题:

docker 中 rabbitmq 的 Spring 启动应用程序问题

孟翰海
2023-03-14

我正在尝试使用 rabbitmq 构建一个带有Spring云流的事件驱动微服务。就我而言,rabbitmq 正在 docker 中运行。

用于在容器下面运行的 Docker 命令

Docker run -d --主机名 my-rabbit --name some-rabbit --publish 15672:15672 Rabbitmq:3

然后进入容器的 bash 模式,我在以下命令下触发:rabbitmq-plugins 启用rabbitmq_management以启动管理插件

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

所以我可以从本地主机上的浏览器访问码头工人:15672

但是当我启动 Spring 启动应用程序时,它不会进行队列和交换。请检查堆栈跟踪。

堆栈跟踪

  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)

提前谢谢。

共有2个答案

东门俊智
2023-03-14

我一直在努力使用在 docker 中运行的兔子 mq,我认为您需要在 spring boot application.properties 文件中创建一些条目以克服连接问题。

由于连接被拒绝,您的交易所似乎未创建。你需要克服这一点。在兔子 Web 管理控制台中,您需要创建一个具有权限的用户。然后在应用程序属性中添加一些配置:

spring.rabbitmq.port=5672
spring.rabbitmq.username=the_user_name
spring.rabbitmq.password=user_password

祝你好运。

嵇星海
2023-03-14

您需要使用具有管理插件的 RabbitMQ 的 Docker 镜像(参见 https://hub.docker.com/_/rabbitmq/),在您的例子中是 rabbitmq:3-management

 类似资料:
  • 我无法在rabbitmq代理“CustomerQ”队列中发送消息。我已经通过spring Boot将rabbitmq broker配置为嵌入式服务器。 当代码试图连接/放入队列中的任何消息时,我得到以下错误: 路径为[]的上下文中servlet[dispatcherServlet]的servlet.Service()引发异常[请求处理失败;嵌套异常为org.SpringFramework.Mess

  • 我花了整整一天的时间来尝试让spring-AMQP示例项目在docker版本的RabbitMQ上运行。我只是在运行标准的rabbitmq Docker。虽然我没有连接问题,但我总是得到与创建队列相关的异常,并且我已经尝试了所有可能的变体,在这一点上。 我尝试在我的配置中声明队列,就像示例项目一样。我尝试显式配置RabbitAdmin。我已经尝试显式配置整个自动配置混乱。我在rabbitmq中创建了

  • 我正在docker容器中运行一个简单的spring boot应用程序。在启动时,是否从或应用程序将始终在以下时间点挂起: 这里有一个问题,我只能在数字海洋(1CPU,1GB MEM)的Ubuntu 14.04盒子上重现这个,即使它在容器中运行。在我的本地机器上,一切都运行良好。 Dockerfile文件: 我尝试过的事情 给JVM更多内存(占机器总数的75%) 按这里建议的方式停止库 我能接触到的

  • 我在一个Spring Boot应用程序中定义了多个Spring批处理作业。例如,job1、Job2。等等。 null

  • 我不熟悉测微计和普罗米修斯,我只使用dropwizards的指标。这让我有点困扰,我实际上需要有3个不同的实例来运行以查看指标 带测微计的Spring靴应用程序本身 使用dropwizard,我可以立即公开聚合指标。 这就是为什么我很好奇是否有可能将Prometheus与我的Spring Boots应用程序一起启动以立即公开很好的聚合数据。到目前为止,我还没有找到任何有用的东西,所以我希望这里的某

  • 我有一个简单的spring-boot项目: 3)尝试启动 我得到一个错误:

  • 问题内容: 我下载了AngularJS phonecat应用程序,并在全球安装了bower,http服务器,karma,量角器。但是,当我使用代码移动到目录并尝试“ npm start”时,它将运行“ npm install”并显示以下错误: angular-phonecat@0.0.0预启动/ Users / twer / angular-phonecat npm安装 npm WARN lock

  • 我在intellij上启动spring boot应用程序时遇到问题,它失败了,并显示以下消息:与目标VM断开连接,地址:'127.0.0.1:49784',传输:'socket' 过程结束,退出代码为255。以前有人遇到过这种情况吗?