如何在 Windows 上安装 Erlang 和 RabbitMQ 并完成首次消息收发?
【免费下载链接】toBeBetterJavaer一份通俗易懂、风趣幽默的Java学习指南,内容涵盖Java基础、Java并发编程、Java虚拟机、Java企业级开发、Java面试等核心知识点。学Java,就认准二哥的Java进阶之路😄项目地址: https://gitcode.com/GitHub_Trending/to/toBeBetterJavaer
如果你想在 Windows 机器上跑起一个 RabbitMQ 消息队列,并完成第一次「生产者发消息、消费者收消息」,二哥的 Java 进阶之路 项目里的《RabbitMQ入门教程(概念、应用场景、安装、使用)》给出了完整路径:先装 Erlang,再装 RabbitMQ,确认服务状态,启用管理插件,最后用 Java 的 amqp-client 客户端完成首次消息收发。本文按这条路径还原整个过程。
为什么必须先装 Erlang
文档中给出的解释是:RabbitMQ 服务器是用 Erlang 语言编写的,它的安装包里并没有集成 Erlang 环境,因此需要先安装 Erlang,再安装 RabbitMQ。这也是标题顺序如此的原因。
安装 Erlang
打开 Erlang 官网下载页(erlang.org/download/otp_versions_tree.html)选择安装包。文档写作时说明的最新版本是 23.0.1,作者选择的是 64 位版本,大小约 104M。
下载完成后直接双击运行安装(文档中为 64 位版本的 otp_win64_23.0.1.exe),安装方式是图形化界面双击下一步。
文档作者记录到过一个现象:安装过程中电脑重启了一次,似乎是要安装一个库;重启后重新双击运行 otp_win64_23.0.1.exe 文件即可完成 Erlang 安装。如果你的机器也出现重启,按同样方式续装即可。
文档没有给出 Erlang 安装完成后的单独验证命令,作者是在 Erlang 安装成功后直接进入 RabbitMQ 安装步骤。
安装 RabbitMQ 并确认服务状态
Erlang 安装成功后,打开 RabbitMQ 官网的 Windows 安装页(www.rabbitmq.com/install-windows.html),选择页面上给出的 Windows 64 位安装包文件下载。文档示例中安装包只有 16.5M,下载完双击运行 exe 文件安装即可。
安装成功后,RabbitMQ 会作为 Windows 服务存在,可以从「开始」菜单管理 RabbitMQ Windows 服务。
确认启动状态的方法:从开始菜单打开「RabbitMQ Command Prompt (sbin dir)」,输入:
rabbitmqctl.bat status文档示例的输出中包含这些信息(数值为文档示例,你的机器会不同):
- 进程 ID(PID)为 2816
- 操作系统为 Windows
- 当前版本号为 3.8.4
- Erlang 的配置信息
能看到这些状态信息,说明 RabbitMQ 服务已经启动。
启用管理插件与 Web 管理端
命令行界面不太直观,文档建议启用管理 UI 插件:
rabbitmq-plugins enable rabbitmq_management看到插件启用成功的提示信息,即可确认插件启用成功。然后在浏览器地址栏输入 http://localhost:15672/ 可以进入 RabbitMQ 管理端界面。管理端之后还能用来观察消息走势图,验证消息收发时会有用。
在 Java 项目中完成首次消息收发
这一步模拟最简单的场景:一个生产者发送消息到队列,一个消费者从队列中读取消息并打印。
添加客户端依赖
在项目的 pom.xml 中添加 RabbitMQ 客户端依赖(文档给出的版本为 5.9.0):
<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.9.0</version> </dependency>生产者:发送消息
新建生产者类 Wanger,队列名为 love:
public class Wanger { private final static String QUEUE_NAME = "love"; public static void main(String[] args) throws IOException, TimeoutException { ConnectionFactory factory = new ConnectionFactory(); try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) { channel.queueDeclare(QUEUE_NAME, false, false, false, null); String message = "小巷,我喜欢你。"; channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8)); System.out.println(" [王二] 发送 '" + message + "'"); } } }关键点(按文档说明):
- ConnectionFactory 用来创建到 RabbitMQ 的默认连接(主机名为 localhost),再创建 Channel 来发送消息;Connection 和 Channel 都实现了 Closeable 接口,所以可以用 try-with-resource 语句。
- 发送消息前必须通过 queueDeclare() 设置队列名称。
- basicPublish() 的四个参数:第一个是 exchange,本场景不需要,设置为空字符串;第二个是 routingKey,这里用队列名填充;第三个是 BasicProperties,暂时不配置;第四个是消息主体,使用 UTF-8 字节数组以避免中文乱码。
注意:源文档给出的示例未列出 import 导入语句,编译前需要按代码中用到的类自行补全。
消费者:接收消息
新建消费者类 XiaoXiang,队列名同样是 love:
public class XiaoXiang { private final static String QUEUE_NAME = "love"; public static void main(String[] args) throws IOException, TimeoutException { ConnectionFactory factory = new ConnectionFactory(); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); channel.queueDeclare(QUEUE_NAME, false, false, false, null); System.out.println("等待接收消息"); DeliverCallback deliverCallback = (consumerTag, delivery) -> { String message = new String(delivery.getBody(), "UTF-8"); System.out.println(" [小巷] 接收到的消息 '" + message + "'"); }; channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { }); } }与生产者的区别(按文档说明):
- 创建通道的代码和生产者差不多,但没有使用 try-with-resource 自动关闭连接和通道,因为希望消费者一直保持连接,直到你强制关闭它。
- 接收消息同样通过 queueDeclare() 设置队列名称。
- RabbitMQ 通过异步方式推送消息,所以要提供 DeliverCallback 回调处理收到的消息。
- basicConsume() 第二个参数 autoAck 为 true 表示服务器一次性交付消息。
运行顺序与结果验证
先启动消费者类 XiaoXiang,它会打印「等待接收消息」并持续等待;再运行生产者类 Wanger,控制台打印[王二] 发送 '小巷,我喜欢你。',消费者控制台随即打印[小巷] 接收到的消息 '小巷,我喜欢你。',一次消息收发完成。
文档还演示了 autoAck 的效果:在启动消费者之前,先多次运行生产者向队列发送多条消息,消费者启动后会一次性收到全部消息。文档示例输出如下(对应多次发送后启动消费者的场景):
等待接收消息 [小巷] 接收到的消息 '小巷,我喜欢你。' [小巷] 接收到的消息 '小巷,我喜欢你。' [小巷] 接收到的消息 '小巷,我喜欢你。'发送消息的过程中,也可以打开 http://localhost:15672/ 管理面板查看消息走势图,从图形上确认消息流量。
版本说明与边界
- 文档演示环境为 Erlang 23.0.1(文档写作时说明的最新版本)、RabbitMQ 3.8.4、amqp-client 5.9.0,均保持文档原样;rabbitmqctl.bat status 输出中的 PID、版本等具体数值属于文档示例,不代表你机器上的固定结果。
- 文档作者自述对 RabbitMQ 仅是入门级使用(「仅仅是因为要用,就学一下」),本文同样只覆盖安装与首次收发,不涉及集群、高可用等文档未展开的内容。
- 文档没有提供 Windows 下更细粒度的故障排查步骤;如果某一步失败,可回到对应步骤核对:Erlang 是否安装完整、rabbitmqctl.bat status 是否显示服务状态、管理插件是否启用成功。
【免费下载链接】toBeBetterJavaer一份通俗易懂、风趣幽默的Java学习指南,内容涵盖Java基础、Java并发编程、Java虚拟机、Java企业级开发、Java面试等核心知识点。学Java,就认准二哥的Java进阶之路😄项目地址: https://gitcode.com/GitHub_Trending/to/toBeBetterJavaer
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考