我在这里浏览Spring教程。
使用RabbitMQ进行消息传递
我找到了这个问题,但没有解决我对docker-compose.yml本教程中找到的文件的查询;
docker-compose.yml
在完成应用程序的实际运行之前,我已经完成了所有必要的步骤,这时我遇到了一些ConnectException异常,表明服务器未在运行或未正确运行。
ConnectException
本教程中指定的docker-compose.yml文件如下:
rabbitmq: image: rabbitmq:management ports: - "5672:5672" - "15672:15672"
基本上,我不确定这个docker- compose文件的实际作用,因为它似乎没有按照教程的建议设置RabbitMQ服务器(或者至少不是按照教程的预期设置)。我对Docker还是一个新手,所以也许我误以为该文件将运行RabbitMQ服务器的新实例。
运行时,docker-compose up我得到以下控制台输出;
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?这是端口号的问题吗?
事实证明,问题出在Spring RabbitMQ模板连接信息。
Spring教程假定使用RabbitMQ(加上Erlang)的常规手动安装,并且RabbitMQ Spring模板使用一些与docker- compose教程中指定的文件中的映像不兼容的默认连接参数。
docker- compose
为了解决这个问题,我需要添加一个Spring application.properties文件并将其添加到resources我的应用程序目录结构中的文件夹中。接下来,我需要使用以下命令找到我的Docker容器的IP地址;
application.properties
resources
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 文件时需要一些额外的步骤。
docker-compose