RabbitMQ 教程 | RabbitMQ 简介

news2024/12/29 10:26:20

👨🏻‍💻 热爱摄影的程序员
👨🏻‍🎨 喜欢编码的设计师
🧕🏻 擅长设计的剪辑师
🧑🏻‍🏫 一位高冷无情的编码爱好者
大家好,我是 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

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

http://localhost:15672

1.4.2 生产和消费消息

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

导入 AMQP 依赖

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
</dependency>

生产者

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 + "'");
    }

}

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

消费者

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");
        });
    }
}

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

1.5 小结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/796085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

充分了解java阻塞队列机制

多线程基础 1.阻塞队列1.1 什么是 阻塞队列1.2 阻塞队列的特点 1.3 阻塞队列常用方法1.3.1 抛出异常:add、remove、element1.3.2 返回结果但是不抛出异常offer、poll、peek1.3.3 阻塞put和take1.3.4 小结 1.4 常见的阻塞队列1.4.1 ArrayListBlockingQueue1.4.2 LinkedBlockingQ…

国标GB28181协议视频平台EasyCVR修改录像计划等待时间较长的原因排查与解决

音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码H.264、平台级联等。为了便于用户二次开发、调用与集成&…

【PMP】有没有项目经理能看得懂这九张图?求挑战

这九张图&#xff0c;全是圈圈我的肺腑之言啊&#xff01;谁痛谁知道&#xff01; 做技术时&#xff0c;就想着30岁就转管理&#xff0c;管理岗位赚得多&#xff0c;结果发现全是烟雾弹。 做技术和代码打交道&#xff0c;做管理跟人打交道。天天开不完的会、说不完的话&#xf…

https证书怎么选择?

https证书即SSL数字证书&#xff0c;是遵守 SSL 协议的一种数字证书&#xff0c;由全球信任的证书颁发机构 (CA) 验证服务器身份后颁发&#xff0c;将 SSL 证书安装在网站服务器上&#xff0c;会激活挂锁和 https 协议。SSL 证书解决了网民登录网站的信任问题&#xff0c;网民可…

Java使用hive连接kyuubi

一、Maven依赖 <dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>2.3.9</version> </dependency> 二、相关配置信息 驱动类&#xff1a;org.apache.hive.jdbc.HiveDriver连接UR…

HDMI接口需注意的PCB可制造性设计问题

高清多媒体接口(High Definition Multimedia Interface)简称HDMI&#xff0c;是一种全数字化视频和声音发送接口&#xff0c;可以同时发送未压缩的视频及音频信号&#xff0c;且发送时采用同一条线材&#xff0c;大大简化了系统线路的安装难度&#xff0c;所以应用非常广泛&…

ubuntu初始化/修改root密码

1.登录ubuntu后&#xff0c;使用sudo passwd root命令&#xff0c;进行root密码的初始化/修改&#xff0c;注&#xff1a;这里需要保证两次输入的密码都是同一个&#xff0c;才可成功 ubuntugt-ubuntu22-04-cmd-v1-0-32gb-100m:~/ocr$ sudo passwd root New password: Retype…

《2023中国开发者调查报告》探索2023中国开发者的技术创新与挑战:AIoT、云原生、国产数据库等领域的发展与前景

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

2023最新Windows安装配置Redis教程,嘎嘎详细

虽然 Redis 官方网站没有提供 Windows 版的安装包&#xff0c;但可以通过 GitHub 来下载 Windows 版 Redis 安装包&#xff0c;下载地址&#xff1a;https://github.com/tporadowski/redis/releases。 注意&#xff1a;Windows 安装包是某位民间“大神”根据 Redis 源码改造的&…

mybatisPlus之通用枚举及字段类型处理器

目录 通用枚举 为什么需要枚举类 EnumValue 具体使用 字段类型处理器 为什么需要字段类型处理器 具体使用 通用枚举 为什么需要枚举类 类的对象只有有限个&#xff0c;确定的。举例如下&#xff1a; 星期&#xff1a;Monday(星期一)、......、Sunday(星期天)性别&#x…

SentencePiece android ndk编译

LLaMa等LLM语言模型一般使用SentencePiece tokenizer&#xff0c;在端侧部署需要编译和使用其c版本。 在安卓平台使用NDK编译 CMakeLists.txt需要进行一些修改&#xff1a; src/CMakeLists.txt如下位置加上log依赖&#xff0c;否则提示android log相关符号不存在。 此外&…

【云原生技术】高效、灵活、易于使用的低代码快速开发平台源码

PaaS低代码快速开发平台是一种快速开发应用系统的工具&#xff0c;用户通过少量代码甚至不写代码就可以快速构建出各种应用系统。 随着信息化技术的发展&#xff0c;企业对信息化开发的需求正在逐渐改变&#xff0c;传统的定制开发已经无法满足企业需求。低代码开发平台&#x…

Michael.W基于Foundry精读Openzeppelin第13期——Checkpoints.sol

Michael.W基于Foundry精读Openzeppelin第13期——Checkpoints.sol 0. 版本0.1 Checkpoints.sol 1. 目标合约2. 代码精读2.1 History体系2.1.1 push(History storage self, uint256 value) && push(History storage self, function(uint256, uint256) view returns (uin…

Windows10下NI板卡驱动安装

文章目录 一. NI&#xff08;National Instruments 美国国家仪器有限公司&#xff09;介绍二. NI Package Manager软件说明 一. NI&#xff08;National Instruments 美国国家仪器有限公司&#xff09;介绍 官网地址: https://www.ni.com/zh-cn/solutions.html?category&…

基于SpringBoot+Vue的实习管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

python pip更新

python pip更新 D:\python>python -m pip list Package Version ---------- ------- pip 23.1.2 setuptools 65.5.0[notice] A new release of pip is available: 23.1.2 -> 23.2.1 [notice] To update, run: python.exe -m pip install --upgrade pipD:\pyt…

Qt完成文本转换为语音播报与保存(系统内置语音引擎)

一、前言 在当今数字化社会,人们对于交互式应用程序的需求越来越高。除了传统的图形用户界面,语音交互也成为了一种流行的交互方式。在这种情况下,将文本转换为语音成为了一项重要的技术,它可以为用户提供更加人性化和便捷的交互方式。在此背景下,Qt提供了QTextToSpeech类…

LeetCode·每日一题·2500. 删除每行中的最大值·模拟

作者&#xff1a;小迅 链接&#xff1a;https://leetcode.cn/problems/delete-greatest-value-in-each-row/solutions/2360713/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-rhmz/ 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 著作权归作者所有。商业转载请联系作者获…

Spring AOP 中,切点有多少种定义方式?

在 Spring AOP 中&#xff0c;我们最常用的切点定义方式主要是两种&#xff1a; 使用 execution 进行无侵入拦截。使用注解进行拦截。 这应该是是小伙伴们日常工作中使用最多的两种切点定义方式了。但是除了这两种还有没有其他的呢&#xff1f;今天松哥就来和大家聊一聊这个话…

[linux--->应用层网络通信协议]

文章目录 [TOC](文章目录) 一、应用层通信概念1.协议2.信息接收 二、网络计算器实战应用三、http协议1.基本认识2.宏观理解http3.网站内部跳转4.请求方法5.状态码5.1重定向5.2错误码 6.常见报头7.http会话保持功能8.模拟http协议服务器编程 四、https协议1.加密概念2.加密的作用…