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

时间:2017-06-28 13:33:24

标签: spring-boot rabbitmq docker-compose

我在这里完成了Spring教程;

Messaging with RabbitMQ

我发现了这个问题,但它没有解决我对教程中找到的docker-compose.yml文件的疑问;

Spring RabbitMQ tutorial results in Connection Refused error

我已经完成了所有必要的步骤,直到实际运行应用程序为止,此时我收到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?这是端口号的问题吗?

2 个答案:

答案 0 :(得分:3)

事实证明问题在于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教程稍微不完整,因为它没有告知读者在使用RabbitMQ docker-compose文件而不是本教程其余部分假设的RabbitMQ手动安装时需要一些额外的步骤。 p>

答案 1 :(得分:1)

据我所知,不可能一直都知道IP地址,您应该提供docker-compose文件中定义的Rabbitmq服务器名称的DNS,而不是IP地址。