RabbitMQ 教程 | RabbitMQ 简介

‍ 热爱摄影的程序员
‍ 喜欢编码的设计师
擅长设计的剪辑师
‍ 一位高冷无情的编码爱好者
大家好,我是 DevOps 工程师
欢迎分享 / 收藏 / 赞 / 在看!

这篇 RabbitMQ 教程为学习者提供了全面的内容,从 RabbitMQ 的简介开始,涵盖了消息中间件的概念、RabbitMQ 的安装与使用,以及交换机、队列、路由键等相关概念的介绍。进一步深入,教程探讨了 AMQP 协议、客户端开发向导,以及消息的发送和消费方式。同时,学习者还可以了解消息传输保障、高级特性如死信队列、延迟队列、优先级队列、RPC 实现等。此外,教程还涵盖了 RabbitMQ 的管理、配置、运维、监控和集群管理等重要主题,帮助学习者充分掌握 RabbitMQ 的应用。整篇教程丰富内容详实,适合初学者和有经验的开发者参考学习。

全篇共 11 章,9 万余字。本文:第1章 RabbitMQ 简介。

第1章 RabbitMQ 简介

1.1 什么是消息中间件

消息中间件是一种用于解决分布式系统中消息传递和通信问题的软件解决方案。它允许不同的应用程序之间通过发送和接收消息来进行通信,而不需要直接依赖于彼此的地址或连接细节。消息中间件提供了解耦、可靠性、可扩展性和灵活性等优点,使得系统之间的消息通信更加可靠和高效。

1.2 消息中间件的作用

消息中间件的作用是在分布式系统中实现异步通信,将消息从一个应用程序发送到另一个应用程序,从而解耦了系统之间的依赖关系。它可以帮助应用程序实现解耦、削峰填谷、消息积压、任务调度、事件发布和订阅等功能。通过消息中间件,应用程序可以更加灵活、可扩展和高效地进行通信。

1.3 RabbitMQ 的起源

RabbitMQ 是一种开源的消息中间件软件,最初由 LShift(一家英国公司)开发,并在 2007 年开始开源。它是使用 Erlang 语言编写的,底层基于 AMQP(高级消息队列协议)标准。RabbitMQ 的设计目标是提供可靠、灵活、可扩展和高性能的消息传递机制,以满足各种不同应用场景的需求。

1.4 RabbitMQ 的安装及简单使用

1.4.1 Docker 安装 RabbitMQ

RabbitMQ - download

输入以下命令运行 RabbitMQ 容器

docker run \
--name rabbitmq-common \
-p 5672:5672 -p 15672:15672 \
-d rabbitmq:3.12-management

进入容器,开启管理插件

docker exec -it rabbitmq-common /bin/bash

rabbitmq-plugins enable rabbitmq_management

RabbitMQ 教程 | RabbitMQ 简介_第1张图片

浏览器输入以下地址访问管理界面,初始用户名和密码都是 guest

http://localhost:15672

RabbitMQ 教程 | RabbitMQ 简介_第2张图片

1.4.2 生产和消费消息

使用 RabbitMQ 的客户端代码,实现消息的生产和消费。生产者将消息发送到队列中,而消费者则从队列中接收和处理消息。

导入 AMQP 依赖


    com.rabbitmq
    amqp-client

生产者

public class Producter {

    // 队列名称
    public static final String QUEUE_NAME = "queue_01";

    public static void main(String[] args) throws IOException, TimeoutException {
        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        // 设置RabbitMQ地址
        factory.setHost("127.0.0.1");
        // 设置RabbitMQ端口号
        factory.setPort(5672);
        // 设置用户名
        factory.setUsername("guest");
        // 设置密码
        factory.setPassword("guest");
        // 创建一个新的连接
        Connection connection = factory.newConnection();
        // 创建一个信道
        Channel channel = connection.createChannel();
        // 声明一个队列
        // 参数1:队列名称,参数2:是否持久化(默认存储在内存中,不持久化,存入磁盘中即持久化),参数3:是否独占队列(为 true 即多个消费者可以消费),参数4:是否自动删除队列,参数5:其他参数
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        // 发送消息到队列中
        String message = "Hello RabbitMQ";
        // 参数1:交换机名称,参数2:队列映射的路由key,参数3:消息的其他属性,参数4:消息体
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
        System.out.println("Producter Send +'" + message + "'");
    }

}

RabbitMQ 教程 | RabbitMQ 简介_第3张图片

在 Web 控制台可以看到我们定义的队列名称

RabbitMQ 教程 | RabbitMQ 简介_第4张图片

消费者

public class Consumer {

    // 队列名称
    public static final String QUEUE_NAME = "queue_01";

    public static void main(String[] args) throws IOException, TimeoutException {
        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        // 设置RabbitMQ地址
        factory.setHost("127.0.0.1");
        // 设置RabbitMQ端口号
        factory.setPort(5672);
        // 设置用户名
        factory.setUsername("guest");
        // 设置密码
        factory.setPassword("guest");
        // 创建一个新的连接
        Connection connection = factory.newConnection();
        // 创建一个信道
        Channel channel = connection.createChannel();
        // 消费者关联队列
        // 参数1:队列名称,参数2:是否自动确认消息(true 表示自动确认消息),参数3:接收消息并处理的回调方法,参数4:取消消息时的回调方法
        channel.basicConsume(QUEUE_NAME, true, (consumerTag, message) -> {
            // consumerTag:消费者标签,message:消息
            // 接收消息并处理
            System.out.println("Consumer Receive +'" + new String(message.getBody()) + "'");
        }, consumerTag -> {
            // consumerTag:消费者标签
            // 取消消息时执行
            System.out.println("Consumer Canceled");
        });
    }
}

RabbitMQ 教程 | RabbitMQ 简介_第5张图片

在 Web 控制台可以看到消费者已经消费了队列上的消息

RabbitMQ 教程 | RabbitMQ 简介_第6张图片

1.5 小结

本章介绍了 RabbitMQ 的简介,包括消息中间件的概念、RabbitMQ 的起源和安装,以及简单的消息生产和消费操作。下一章将深入了解 RabbitMQ 的相关概念及其运转流程。

你可能感兴趣的:(MQ,rabbitmq,分布式)