快速上手 RabbitMQ:使用 Docker 轻松搭建消息队列系统

在现代的分布式系统中,消息队列(Message Queue)是实现异步通信、解耦系统组件、提高系统可扩展性和可靠性的重要工具。RabbitMQ 是一个广泛使用的开源消息代理软件,它实现了高级消息队列协议(AMQP),并提供了丰富的功能和灵活的配置选项。下面将介绍 RabbitMQ 的基本概念,并详细说明如何使用 Docker 快速安装和运行 RabbitMQ。

在这里插入图片描述

1. RabbitMQ 简介

1.1 什么是 RabbitMQ?

RabbitMQ 是一个开源的消息代理软件,它支持多种消息协议,包括 AMQP(Advanced Message Queuing Protocol)、MQTT、STOMP 等。RabbitMQ 的主要功能是接收、存储和转发消息,使得不同的应用程序可以通过消息队列进行异步通信。

1.2 RabbitMQ 的核心概念

  1. Producer(生产者):发送消息的应用程序。
  2. Consumer(消费者):接收消息的应用程序。
  3. Queue(队列):存储消息的缓冲区。生产者将消息发送到队列,消费者从队列中接收消息。
  4. Exchange(交换机):决定消息如何路由到队列。RabbitMQ 提供了多种类型的交换机,如 direct、topic、fanout 和 headers。
  5. Binding(绑定):定义了交换机和队列之间的关系,决定了消息如何从交换机路由到队列。
  6. Channel(信道):在连接内部建立的虚拟连接,用于发送和接收消息。
  7. Connection(连接):应用程序与 RabbitMQ 之间的 TCP 连接。

1.3 RabbitMQ 的优势

  • 异步通信:RabbitMQ 允许生产者和消费者异步工作,提高系统的响应速度和吞吐量。
  • 解耦系统:通过消息队列,不同的系统组件可以独立开发和部署,减少系统间的耦合。
  • 可扩展性:RabbitMQ 支持集群和负载均衡,可以轻松扩展以处理更多的消息。
  • 可靠性:RabbitMQ 提供了持久化、消息确认、事务等机制,确保消息的可靠传递。

2. 使用 Docker 安装 RabbitMQ

Docker 是一个开源的容器化平台,它可以将应用程序及其依赖项打包到一个轻量级的容器中,使得应用程序可以在任何环境中一致地运行。使用 Docker 安装 RabbitMQ 可以简化部署过程,避免复杂的依赖关系和环境配置问题。

2.1 拉取 RabbitMQ Docker 镜像

Docker Hub 上提供了官方的RabbitMQ镜像,我们可以直接拉取并使用它。

docker pull rabbitmq:3-management

rabbitmq:3-management 是带有管理插件的 RabbitMQ 镜像,它包含了 RabbitMQ 的管理界面,方便我们进行管理和监控。

2.2 运行 RabbitMQ 容器

拉取镜像后,我们可以使用以下命令运行 RabbitMQ 容器:

docker run -d --name=rabbitmq --restart=always -p 5672:5672 -p 15672:15672 rabbitmq:3-management
  • -d:以 detached 模式运行容器,即在后台运行。
  • --name=rabbitmq:为容器指定一个名称 rabbitmq
  • --restart=always:设置容器在系统重启后自动启动,除非手动停止。
  • -p 5672:5672:将容器的 5672 端口(AMQP 端口)映射到主机的 5672 端口。
  • -p 15672:15672:将容器的 15672 端口(管理界面端口)映射到主机的 15672 端口。

2.3 访问 RabbitMQ 管理界面

容器启动后,你可以通过浏览器访问 RabbitMQ 的管理界面:

http://192.168.200.138:15672/#/

默认的用户名和密码是 guestguest。你可以通过管理界面查看队列、交换机、连接等信息,并进行配置和管理。

在这里插入图片描述

2.4 使用 RabbitMQ

现在,你已经成功安装并运行了 RabbitMQ。你可以使用各种编程语言的客户端库(如 Python 的 pika、Java 的 RabbitMQ Java Client 等)来连接 RabbitMQ,并发送和接收消息。

以下是一个简单的 Java 示例:

2.4.1 使用 Maven 管理依赖

如果你使用 Maven 来管理项目依赖,可以在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.20.0</version>
</dependency>
2.4.2 编写 Java 程序发送消息

接下来,我们将编写一个简单的 Java 程序,使用 RabbitMQ 发送消息。

创建生产者类

创建一个名为 RabbitMQProducer.java 的 Java 类,并编写以下代码:

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class RabbitMQProducer {

    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.200.138");
        factory.setPort(5672);
        factory.setVirtualHost("/test");
        factory.setUsername("test");
        factory.setPassword("test");

        // 创建连接和信道
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        try {
            // 声明队列
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);

            // 发送消息
            String message = "Hello, RabbitMQ!";
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" [x] Sent '" + message + "'");
        } finally {
            // 关闭通道和连接
            channel.close();
            connection.close();
        }
    }
}
2.4.3 代码解释
  1. 连接工厂ConnectionFactory 用于创建与 RabbitMQ 的连接。我们设置了连接的主机地址、端口、虚拟主机、用户名和密码。
  2. 连接和信道:通过 factory.newConnection() 创建连接,并通过 connection.createChannel() 创建信道。
  3. 声明队列:使用 channel.queueDeclare() 声明一个名为 hello 的队列。如果队列不存在,RabbitMQ 会自动创建它。
  4. 发送消息:使用 channel.basicPublish() 方法将消息发送到队列。消息的内容是字符串 "Hello, RabbitMQ!"
  5. 关闭信道和连接:在 finally 块中关闭信道和连接,确保资源被正确释放。
2.4.4 运行程序

编译并运行 RabbitMQProducer 类。如果一切正常,你将在控制台看到以下输出:

 [x] Sent 'Hello, RabbitMQ!'

在这里插入图片描述

2.4.5 验证消息

你可以通过 RabbitMQ 的管理界面来验证消息是否成功发送。访问 http://192.168.200.138:15672/#/,使用默认的用户名和密码 guest 登录,然后在管理界面中查看队列 hello 中的消息。

在这里插入图片描述

3. 总结

RabbitMQ 是一个功能强大且灵活的消息代理软件,适用于各种分布式系统中的异步通信需求。通过 Docker,我们可以快速、一致地部署和管理 RabbitMQ,避免了复杂的依赖关系和环境配置问题。希望本文能够帮助你快速上手 RabbitMQ,并在实际项目中发挥其强大的功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

任务管理法宝:甘特图详解

在项目管理中&#xff0c;如何清晰、直观地展示项目的进度和任务分配&#xff1f; 甘特图作为一种经典的项目管理工具&#xff0c;提供了有效的解决方案。无论是团队合作还是个人项目管理&#xff0c;甘特图都能帮助你轻松追踪各项任务的进展。今天&#xff0c;我们将详细介绍…

Keil5配色方案修改为类似VSCode配色

1. 为什么修改Keil5配色方案 视觉习惯&#xff1a;如果你已经习惯了VSCode的配色方案&#xff0c;尤其是在使用ESP-IDF开发ESP32时&#xff0c;Keil5的默认配色可能会让你感到不习惯。减少视觉疲劳&#xff1a;Keil5的默认背景可能过于明亮&#xff0c;长时间使用可能会导致视…

电子病历静态数据脱敏路径探索

一、引言 数据脱敏&#xff08;Data Masking&#xff09;&#xff0c;屏蔽敏感数据&#xff0c;对某些敏感信息&#xff08;比如patient_name、ip_no、ad、no、icd11、drug等等 &#xff09;通过脱敏规则进行数据的变形&#xff0c;实现隐私数据的可靠保护。电子病历作为医疗领…

【Linux | 计网】TCP协议深度解析:从连接管理到流量控制与滑动窗口

目录 前言&#xff1a; 1、三次握手和四次挥手的联系&#xff1a; 为什么挥手必须要将ACK和FIN分开呢&#xff1f; 2.理解 CLOSE_WAIT 状态 CLOSE_WAIT状态的特点 3.FIN_WAIT状态讲解 3.1、FIN_WAIT_1状态 3.2、FIN_WAIT_2状态 3.3、FIN_WAIT状态的作用与意义 4.理解…

矩阵加法        ‌‍‎‏

矩阵加法 C语言代码C 语言代码Java语言代码Python语言代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输入两个n行m列的矩阵A和B&#xff0c;输出它们的和AB。 输入 第一行包含两个整数n和m&#xff0c;表示矩阵的行数和列数。1 <…

当大的div中有六个小的div,上面三个下面三个,当外层div高变大的时候我希望里面的小的div的高也变大

问&#xff1a; 当大的div中有六个小的div&#xff0c;上面三个下面三个&#xff0c;当外层div高变大的时候我希望里面的小的div的高也变大 回答&#xff1a; 这时候我们就不能写死六个小的div的高度&#xff0c;否则上下的小的div的间距就会变大&#xff0c;因为他们的高度…

C++打造局域网聊天室第一课:编程环境及准备知识

文章目录 前言一、使用环境二、基础知识1.MFC&#xff08;Microsoft Foundation Class&#xff09;2.API&#xff08;Application Programming Interface&#xff09;3.Unicode编码4.简单的比较5.WinSock6.多线程知识 总结 前言 C打造局域网聊天室第一课&#xff1a;编程环境及…

【网络安全】网站常见安全漏洞 - 网站基本组成及漏洞定义

文章目录 引言1. 一个网站的基本构成2. 一些我们经常听到的安全事件3. 网站攻击者及其意图3.1 网站攻击者的类型3.2 攻击者的意图 4. 漏洞的分类4.1 按来源分类4.2 按危害分类4.3 常见漏洞与OWASP Top 10 引言 在当今的数字化时代&#xff0c;安全问题已成为技术领域不可忽视的…

大数据项目-Django基于聚类算法实现的房屋售房数据分析及可视化系统

《[含文档PPT源码等]精品Django基于聚类算法实现的房屋售房数据分析及可视化系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程课程答疑等&#xff01; 数据库管理工具&#xff1a;phpstudy/Navicat或者phpstudy/sqlyog 后台管理系统涉及技术&#xff1a; 后台使…

SpringBoot如何使用EasyExcel实现表格导出(简洁快速入门版本)

前言 前面给大家介绍了动态表头的导入&#xff0c;这篇文章给大家介绍如何实现导出 前面给大家介绍了动态表头的导入&#xff0c;我们了解了如何通过EasyExcel灵活地读取结构不固定的Excel文件。这次&#xff0c;我们将目光转向数据导出——即如何将数据以Excel文件的形式输出…

Visual Studio 2022 项目配置常用选项

作为一名C++开发者,经常需要配置第三方库,今天来跟大家截图一下,方便大家快速配置: 头文件包含目录: 或者: 库文件包含目录:

【MATLAB源码-第235期】基于matlab的盲均衡算法仿真,对比CMA,MCMA,CMA-DD三种算法的性能。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在通信系统中&#xff0c;信号在传输过程中会受到各种干扰和噪声的影响&#xff0c;这些干扰和噪声会导致信号失真&#xff0c;进而影响接收端的解调和判决准确性。为了减少这些影响&#xff0c;提高接收信号的质量&#xff…

PyQt的信号和槽的应用

代码 import sysfrom PySide6.QtWidgets import QApplication,QWidget,QPushButton,QLineEditfrom login_t3 import Ui_Form from second import Ui_Form2from PySide6.QtCore import Qtclass MyWidget(Ui_Form,QWidget):def __init__(self):super().__init__()self.setupUi(s…

Hadoop生态圈框架部署(八)- Hadoop高可用(HA)集群部署

文章目录 前言一、部署规划二、Hadoop HA集群部署&#xff08;手动部署&#xff09;1. 下载hadoop2. 上传安装包2. 解压hadoop安装包3. 配置hadoop配置文件3.1 虚拟机hadoop1修改hadoop配置文件3.1.1 修改 hadoop-env.sh 配置文件3.3.2 修改 core-site.xml 配置文件3.3.3 修改 …

51单片机(STC89C52RC版本)学习笔记(更新中...)

文章目录 参考资料1. 准备工作1.1 win10配置51单片机开发环境1.1 Ubuntu配置51单片机开发环境问题1&#xff1a;mcs51/8051.h依赖于mcs51/lint.h问题2&#xff1a;提示找不到头文件mcs51/8051.h 2. 认识51单片机2.1 STC89C52单片机2.2 管脚图2.3 原理图2.4 按键抖动2.5 头文件说…

计算机毕业设计Python+大模型农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

leetcode 62.不同路径

1.题目要求: 2.解题思路: 利用动态规划去解此题 3.题目代码: class Solution { public:int uniquePaths(int m, int n) {//创建dp数组vector<vector<int>> dp;dp.resize(m);for(int i 0;i < dp.size();i){dp[i].resize(n);}//确定dp数组的含义//初始化for(i…

前端开发 之 15个页面加载特效下【附完整源码】

文章目录 十二&#xff1a;铜钱3D圆环加载特效1.效果展示2.HTML完整代码 十三&#xff1a;扇形百分比加载特效1.效果展示2.HTML完整代码 十四&#xff1a;四色圆环显现加载特效1.效果展示2.HTML完整代码 十五&#xff1a;跷跷板加载特效1.效果展示2.HTML完整代码 十二&#xff…

什么是抖音本地推-字节重点布局赛道

什么是抖音本地推&#xff0c;简历来说就是在注册一个店铺&#xff0c;然后把客户引流到店铺或者售卖相关的套餐。做抖音本地推一定需要先注册抖音来客-店铺认领&#xff0c;需要准备的资料&#xff1a;营业执照&#xff0c;法人身份证正反面&#xff0c;对应的行业资质&#x…

基于Matlab计算机视觉的车道线识别与前车检测系统研究

随着自动驾驶技术的发展&#xff0c;车道线识别和前车检测成为智能驾驶系统中的核心技术之一。本实训报告围绕基于计算机视觉的车道线识别与前车检测系统展开&#xff0c;旨在通过处理交通视频数据&#xff0c;实时检测车辆所在车道及其与前车的相对位置&#xff0c;从而为车道…