一尘不染

Spring / RabbitMQ教程的Docker映像导致连接被拒绝

spring-boot

我在这里浏览Spring教程。

使用RabbitMQ进行消息传递

我找到了这个问题,但没有解决我对docker-compose.yml本教程中找到的文件的查询;

在完成应用程序的实际运行之前,我已经完成了所有必要的步骤,这时我遇到了一些ConnectException异常,表明服务器未在运行或未正确运行。

本教程中指定的docker-compose.yml文件如下:

rabbitmq:
image: rabbitmq:management
ports:
  - "5672:5672"
  - "15672:15672"

基本上,我不确定这个docker-
compose文件的实际作用,因为它似乎没有按照教程的建议设置RabbitMQ服务器(或者至少不是按照教程的预期设置)。我对Docker还是一个新手,所以也许我误以为该文件将运行RabbitMQ服务器的新实例。

运行时,docker-compose up我得到以下控制台输出;

rabbitmq_1  |
rabbitmq_1  | =INFO REPORT==== 28-Jun-2017::13:27:26 ===
rabbitmq_1  | Starting RabbitMQ 3.6.10 on Erlang 20.0-rc2
rabbitmq_1  | Copyright (C) 2007-2017 Pivotal Software, Inc.
rabbitmq_1  | Licensed under the MPL.  See http://www.rabbitmq.com/
rabbitmq_1  |
rabbitmq_1  |               RabbitMQ 3.6.10. Copyright (C) 2007-2017            Pivotal Software, Inc.
rabbitmq_1  |   ##  ##      Licensed under the MPL.  See  http://www.rabbitmq.com/
rabbitmq_1  |   ##  ##
rabbitmq_1  |   ##########  Logs: tty
rabbitmq_1  |   ######  ##        tty
rabbitmq_1  |   ##########
rabbitmq_1  |               Starting broker...
rabbitmq_1  |
rabbitmq_1  | =INFO REPORT==== 28-Jun-2017::13:27:26 ===
rabbitmq_1  | node           : rabbit@bd20dc3d3d2a
rabbitmq_1  | home dir       : /var/lib/rabbitmq
rabbitmq_1  | config file(s) : /etc/rabbitmq/rabbitmq.config
rabbitmq_1  | cookie hash    : DTVsmjdKvD5KtH0o/OLVJA==
rabbitmq_1  | log            : tty
rabbitmq_1  | sasl log       : tty
rabbitmq_1  | database dir   : /var/lib/rabbitmq/mnesia/rabbit@bd20dc3d3d2a

…加上大量的INFO报告。这使我相信RabbitMQ服务器已启动并正在运行,但是显然不能,因为我无法连接。

使它起作用的唯一方法是手动安装Erlang和RabbitMQ(在此处的Windows系统上),这似乎可以使我完成本教程。

为什么在本教程中甚至提到了Docker?在docker-compose.yml不出现做教程提出什么。

该文件在这里实际上是做什么的?就本教程而言,如何在docker容器中运行RabbitMQ?这是端口号的问题吗?


阅读 806

收藏
2020-05-30

共1个答案

一尘不染

事实证明,问题出在Spring RabbitMQ模板连接信息。

Spring教程假定使用RabbitMQ(加上Erlang)的常规手动安装,并且RabbitMQ Spring模板使用一些与docker- compose教程中指定的文件中的映像不兼容的默认连接参数。

为了解决这个问题,我需要添加一个Spring
application.properties文件并将其添加到resources我的应用程序目录结构中的文件夹中。接下来,我需要使用以下命令找到我的Docker容器的IP地址;

docker-machine ip

这将给出IP地址。我在application.properties文件中添加了以下参数;

spring.rabbitmq.host={docker-machine ip address}
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

这里的端口,用户名和密码都是默认值,可以在RabbitMQ文档中找到。

这样做,我能够使我的应用程序正确连接到在Docker容器中运行的RabbitMQ服务器。

Spring教程似乎有些不完整,因为它没有通知读者在使用docker-compose本教程其余部分假定的RabbitMQ手动安装时使用RabbitMQ
文件时需要一些额外的步骤。

2020-05-30