RabbitMQ 使用教程(看完就会用了)

RabbitMQ 是一种消息队列软件,可以用来实现分布式系统中的消息传递、异步任务处理、日志收集等功能。它基于 AMQP(Advanced Message Queuing Protocol)协议,支持多种编程语言和平台。

本文将介绍 RabbitMQ 的基本概念和使用方法,包括:

  • RabbitMQ 的基本概念和架构
  • 如何安装和配置 RabbitMQ
  • 如何使用 RabbitMQ 发送和接收消息
  • 如何使用 RabbitMQ 进行消息的确认和重试
  • 如何使用 RabbitMQ 实现发布订阅模式和工作队列模式

RabbitMQ 的基本概念和架构

基本概念

  • 消息(Message):指的是传递的信息。消息由消息头和消息体组成,消息头包含了一些元数据,例如消息的路由键、消息的优先级等。
  • 消息队列(Queue):指的是消息的缓存区。当生产者发送消息时,消息会被发送到消息队列中,等待消费者消费。
  • 交换机(Exchange):指的是消息的路由中心。当消息被发送到交换机时,交换机会将消息根据路由键发送到对应的消息队列中。
  • 绑定(Binding):指的是交换机和消息队列之间的绑定关系。绑定规定了交换机将消息发送到哪些消息队列中。
  • 路由键(Routing Key):指的是消息的路由关键字。交换机会根据路由键将消息发送到对应的消息队列中。

架构

RabbitMQ 的架构分为四个部分:

  • 生产者(Producer):指的是发送消息的客户端。
  • 消息队列(Queue):指的是消息的缓存区,用于存储消息。
  • 交换机(Exchange):指的是消息的路由中心,用于将消息发送到对应的消息队列中。
  • 消费者(Consumer):指的是接收消息的客户端。

安装和配置 RabbitMQ

安装 RabbitMQ

RabbitMQ 的安装非常简单。只需从官方网站 https://www.rabbitmq.com/download.html 下载对应版本的 RabbitMQ 安装包,然后按照提示进行安装即可。

配置 RabbitMQ

安装完成后,需要进行一些配置工作,以便 RabbitMQ 正常运行。具体步骤如下:

  1. 启动 RabbitMQ 服务器。在 Windows 系统下,可以通过 “Start Menu”->“RabbitMQ Server”->“Start RabbitMQ Command Prompt” 打开命令行窗口,然后输入以下命令:
rabbitmq-server.bat start
  1. 创建管理员账户。在命令行窗口中输入以下命令:
rabbitmqctl add_user admin password

这里将管理员账户的用户名设置为 “admin”,密码设置为 “password”,你可以根据自己的需要修改。

  1. 授予管理员权限。在命令行窗口中输入以下命令:
rabbitmqctl set_user_tags admin administrator

这里将管理员账户的标签设置为 “administrator”,以授予其完整的管理权限。

  1. 创建虚拟主机。在命令行窗口中输入以下命令:
rabbitmqctl add_vhost /my_vhost

这里将创建一个名为 “my_vhost” 的虚拟主机,你可以根据自己的需要修改。

  1. 授予虚拟主机权限。在命令行窗口中输入以下命令:
rabbitmqctl set_permissions -p /my_vhost admin ".*" ".*" ".*"

这里将管理员账户授予了 “my_vhost” 虚拟主机的所有权限。

  1. 启用 RabbitMQ 管理插件。在命令行窗口中输入以下命令:
rabbitmq-plugins enable rabbitmq_management

这里启用了 RabbitMQ 的管理插件,可以通过浏览器访问 http://localhost:15672/ 来进行管理。

使用 RabbitMQ 发送和接收消息

发送消息

以下是使用 RabbitMQ 发送消息的基本流程:

  1. 创建 ConnectionFactory 对象。Connection 是 RabbitMQ 的一个核心概念,表示与 RabbitMQ 建立的 TCP 连接。ConnectionFactory 是用于创建 Connection 对象的工厂类。
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setUsername("admin");
factory.setPassword("password");
factory.setVirtualHost("/my_vhost");
  1. 创建 Connection 对象。这里使用了 ConnectionFactory 的 createConnection() 方法创建 Connection 对象。
Connection connection = factory.newConnection();
  1. 创建 Channel 对象。Channel 是 RabbitMQ 的另一个核心概念,表示通过 Connection 建立的信道。我们可以通过 Channel 对象来发送和接收消息。
Channel channel = connection.createChannel();
  1. 声明队列。如果要向一个不存在的队列发送消息,需要先声明该队列。
String queueName = "hello";
channel.queueDeclare(queueName, false, false, false, null);
  1. 发送消息。使用 Channel 对象的 basicPublish() 方法来发送消息。其中,exchange 参数表示交换机的名称,routingKey 参数表示消息的路由键。
String message = "Hello World!";
channel.basicPublish("", queueName, null, message.getBytes("UTF-8"));
  1. 关闭 Channel 和 Connection。发送完消息后,需要及时关闭 Channel 和 Connection 对象。
channel.close();
connection.close();

接收消息

以下是使用 RabbitMQ 接收消息的基本流程:

  1. 创建 ConnectionFactory 对象。
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setUsername("admin");
factory.setPassword("password");
factory.setVirtualHost("/my_vhost");
  1. 创建 Connection 对象。
Connection connection = factory.newConnection();
  1. 创建 Channel 对象。
Channel channel = connection.createChannel();
  1. 声明队列。
String queueName = "hello";
channel.queueDeclare(queueName, false, false, false, null);
  1. 创建 Consumer 对象。使用 DefaultConsumer 类来实现 Consumer 接口的抽象方法,来接收消息。
DefaultConsumer consumer = new DefaultConsumer(channel) {
    @Override
    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
        String message = new String(body, "UTF-8");
        System.out.println("Received message: " + message);
    }
};
  1. 监听队列。使用 Channel 对象的 basicConsume() 方法来监听队列。其中,autoAck 参数表示是否自动确认消息,设置为 true 表示自动确认。
channel.basicConsume(queueName, true, consumer);
  1. 关闭 Channel 和 Connection。
channel.close();
connection.close();

RabbitMQ 的应用场景

RabbitMQ 是一个功能强大的消息队列中间件,可以应用于多种场景,包括:

  1. 异步处理:将需要异步处理的任务封装成消息发送到 RabbitMQ 中,由消费者来接收并处理,从而将请求的响应时间缩短,提高系统的并发能力。
  2. 应用解耦:将不同应用之间的通信通过 RabbitMQ 来进行,从而实现应用之间的解耦,提高系统的可扩展性。
  3. 流量削峰:在高并发情况下,通过 RabbitMQ 进行流量削峰,将请求放入消息队列中,由消费者来按照处理能力进行消费,从而保证系统的稳定性。
  4. 日志收集:将应用产生的日志消息发送到 RabbitMQ 中,由专门的消费者来处理和存储,从而实现日志的集中管理。
  5. 分布式事务:通过 RabbitMQ 来实现分布式事务的处理,将各个节点的操作封装成消息发送到 RabbitMQ 中,由消费者来进行事务的统一处理,从而保证整个系统的一致性。

总结

本文介绍了 RabbitMQ 的基本概念、安装和配置、使用方法以及应用场景。RabbitMQ 是一个功能强大的消息队列中间件,具有高并发、高可靠、高可扩展等优点,可以应用于多种场景。如果你正在开发一个高并发、分布式的系统,RabbitMQ 绝对是一个值得考虑的选择。

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RabbitMQ是一个使用Erlang实现的高并发高可靠AMQP消息队列服务器。它支持消息的持久化、事务、拥塞控制、负载均衡等特性,使得RabbitMQ在各种应用场景下被广泛使用。RabbitMQ与Erlang和AMQP密切相关。 Erlang是一种编程语言,它特别适合构建高并发、分布式、实时的系统。RabbitMQ使用Erlang作为其底层开发语言,这使得它能够充分利用Erlang在并发处理和容错性方面的优势。 AMQP(Advanced Message Queuing Protocol)是一个开放标准的消息队列协议,用于在应用程序之间进行可靠的消息传递。RabbitMQ实现了AMQP协议,这意味着它可以与其他遵循AMQP协议的应用程序进行通信,实现可靠的消息传递机制。 要使用RabbitMQ,可以通过Docker安装,使用以下命令运行一个带有管理界面的RabbitMQ容器: ``` docker run -itd --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management ``` 在编写RabbitMQ程序时,可以利用其支持的多种消息模型,例如发布-订阅模型、工作队列模型、路由模型等,根据具体需求选择合适的模型来实现消息传递。 在配置RabbitMQ环境时,可以设置RABBITMQ_SERVER环境变量,并将RabbitMQ的安装路径添加到系统的path变量中,以方便在命令行中直接使用RabbitMQ命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [RabbitMQ使用详解](https://blog.csdn.net/qq_43410878/article/details/123656765)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王要努力ぴ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值