消息队列之RabbitMQ介绍

这篇具有很好参考价值的文章主要介绍了消息队列之RabbitMQ介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
消息队列之RabbitMQ介绍


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

在当今的分布式系统和微服务架构中,消息队列扮演着至关重要的角色。它们为应用程序提供了一种可靠的异步通信机制,使得各个组件之间能够高效地传递消息和协调工作。而在众多的消息队列技术中,RabbitMQ 无疑是一个备受关注和广泛应用的佼佼者。
RabbitMQ 是一个开源的消息队列服务器,它基于 AMQP(Advanced Message Queuing Protocol)协议实现。通过使用 RabbitMQ,开发人员可以轻松地实现应用程序之间的消息传递、异步处理和流量削峰等功能。它具有高度的可靠性、灵活性和可扩展性,能够处理大量的消息并发,并支持多种编程语言和客户端。
在本博客中,我将带领大家深入了解 RabbitMQ 的世界。我们将探讨 RabbitMQ 的核心概念、工作原理以及它的一些重要特性。我还将分享一些实际的使用场景和最佳实践,帮助你更好地理解如何将 RabbitMQ 应用于你的项目中。
无论你是一名经验丰富的开发人员,还是刚刚开始接触消息队列的新手,我相信本博客都能为你提供有价值的信息和启发。让我们一起探索 RabbitMQ 的魅力,掌握它的强大功能,为构建高效、可靠的应用程序迈出坚实的一步!


提示:以下是本篇文章正文内容,下面案例可供参考

一、RabbitMQ介绍

消息队列

MQ是Message Queue的简称,也就是消息队列,消息队列是用来消息传递的过程中储存消息的容器。应用于异步通信,

消息

消息是指两台计算机间传递的数据单位。消息可以是简单的字符串,也可以是复杂的对象。

队列

队列是数据结构中的概念。队列中的数据有先进先出、后进后出的特点。

RabbitMQ

RabbitMQ 是一个开源的消息队列服务器,基于 AMQP(Advanced Message Queuing Protocol)协议实现,它提供了可靠的消息传递机制,可以确保消息不会丢失。
RabbitMQ 具有高度的灵活性,支持多种消息传递模式,如点对点、发布/订阅等,以满足不同的应用场景。同时,它还支持多种编程语言和客户端,并提供了广泛的客户端库,方便开发人员进行开发。
在处理更高的消息吞吐量和更多的连接时,RabbitMQ 可以轻松扩展。它提供了丰富的文档和资源,方便用户学习和解决问题,并且拥有一个活跃的社区,可以提供技术支持和交流。

二、使用Rabbit MQ的优势

解耦应用

通过使用消息队列,应用程序的不同组件可以松耦合地通信,而无需直接相互依赖。这有助于提高应用的灵活性和可维护性。

举个例子:考虑一个电子商务网站的订单处理系统。当用户在网站上下订单时,订单系统需要将订单信息发送给库存系统以检查商品库存,同时将订单信息发送给支付系统以处理支付。如果订单系统直接与库存系统和支付系统进行通信,那么它们之间就会产生紧耦合。
使用 RabbitMQ,订单系统可以将订单消息发送到一个队列中,而库存系统和支付系统可以作为消费者从队列中接收订单消息并进行处理。这样,订单系统不再直接与库存系统和支付系统进行通信,而是通过消息队列进行解耦。
这种解耦的好处是,当库存系统或支付系统需要升级或维护时,订单系统不会受到影响。它们可以继续发送订单消息到队列中,而库存系统和支付系统可以在之后的时间处理这些消息。此外,如果订单量突然增加,队列可以起到缓冲的作用,确保库存系统和支付系统不会被瞬间的高流量淹没。

异步处理

RabbitMQ 允许应用程序进行异步处理,从而提高系统的响应性和并发处理能力。发送方可以将消息发送到队列后立即返回,而接收方可以在之后的时间处理消息。

流量削峰

在高并发或突发流量的情况下,RabbitMQ 可以作为缓冲区来吸收和处理大量的消息。它可以帮助系统抵御瞬间的峰值负载,避免应用程序崩溃或性能下降。

高可靠性

RabbitMQ 提供了可靠的消息传递机制,确保消息不会丢失。即使在发送方或接收方出现故障的情况下,消息也可以被存储在队列中,并在系统恢复后重新处理。

三、使用Rabbit MQ的劣势

  • 系统可用性降低 系统引入的外部依赖越多,系统稳定性越差。一旦MQ宕机,就会对业务造成影响。
  • 系统复杂度提高 MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用。
  • 一致性问题 A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败,则会造成数据处理的不一致。

四、RabbitMQ的应用场景

秒杀活动

对于抢红包、抢车票等秒杀活动,一瞬间便会有大量请求打过来,如果直接处理,会浪费很多资源,我们可以先将请求放到MQ中,先请求的秒杀成功,后请求的秒杀失败。

消息分发

如电商网站要推送促销信息,该业务耗费时间较多,但对时效性要求不高,可以使用MQ做消息分发。

数据同步

假如我们需要将数据保存到数据库之外,还需要一段时间将数据同步到缓存(如Redis)、搜索引擎(如Elasticsearch)中。此时可以将数据库的数据作为消息发送到MQ中,并同步到缓存、搜索引擎中。

异步处理

在电商系统中,订单完成后,需要及时的通知子系统(进销存系统发货,用户服务积分,发送短信)进行下一步操作。为了保证订单系统的高性能,应该直接返回订单结果,之后让MQ通知子系统做其他非实时的业务操作。这样能保证核心业务的高效及时。

五、RabbitMQ的工作原理

  • 生产者(Producer):生产者将消息发送到 RabbitMQ 队列中。生产者可以是应用程序或服务,它们将消息发送到 RabbitMQ 队列以进行后续处理。
  • 连接(Connection):生产者/消费者和RabbitMQ服务器之间建立的TCP连接。
  • 信道(Channel):是TCP里面的虚拟连接。例如:Connection相当于电缆,Channel相当于独立光纤束,一条TCP连接中可以创建多条信道,增加连接效率。无论是发布消息、接收消息、订阅队列都是通过信道完成的。
  • Broker:消息队列服务器实体。即RabbitMQ服务器
  • Virtual host:虚拟主机。出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中。每个vhost本质上就是一个mini版的RabbitMQ服务器,拥有自己的队列、交换机、绑定和权限机制。当多个不同的用户使用同一个RabbitMQ服务器时,可以划分出多个虚拟主机。RabbitMQ默认的虚拟主机路径是/。
  • 交换机(Exchange):交换机是RabbitMQ 中的一个组件,用于将消息从生产者发送到队列。交换机可以根据消息的内容或属性将其发送到不同的队列中。
  • 队列(Queue):RabbitMQ 队列是一个存储消息的容器。队列可以被多个消费者同时消费,消息在队列中按照先进先出(FIFO)的原则进行存储。
  • 绑定(Binding):绑定是RabbitMQ 中的一个配置,用于将交换机和队列关联起来。通过绑定,生产者可以将消息发送到特定的交换机,而交换机则可以将消息转发到指定的队列中。
  • 消费者(Consumer):消费者从 RabbitMQ 队列中获取消息并进行处理。消费者可以是应用程序或服务,它们从队列中获取消息并进行后续的处理或存储。

当生产者将消息发送到 RabbitMQ 时,它会将消息发送到指定的交换机。交换机根据绑定规则将消息转发到相应的队列中。然后,消费者从队列中获取消息并进行处理。整个过程是异步的,生产者和消费者不需要等待对方完成操作,而是可以继续进行自己的工作。

六、RabbitMQ的使用

因为RabbitMQ是使Erlang编写的,所以使用RabbitMQ需要安装Erlanghuanjing

安装Erlang环境

1.安装Erlang所需的依赖

yum install -y epel-release

2.添加存储库条目

wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm 
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm

3.安装Erlang

yum install -y erlang

4.查看Erlang是否安装成功

erl -version

安装RabbitMQ

1.为了外部能够正常访问RabbitMQ服务,先关闭防火墙

# 关闭运行的防火墙
systemctl stop firewalld.service
# 禁止防火墙自启动
systemctl disable firewalld.service

2.RabbitMQ是通过主机名进行访问的,必须给服务器添加主机名

# 修改文件
vim /etc/sysconfig/network
# 添加如下内容
NETWORKING=yes
HOSTNAME=itbaizhan


# 修改文件
vim /etc/hosts
# 添加如下内容
服务器ip zhangsan

3.在Windos中下载RabbitMQ压缩包(大家去网上找),使用rz命令从Windos上传到Linux(虚拟机)中。
4.安装RabbitMQ

# 解压RabbitMQ
tar xf rabbitmq-server-generic-unix-3.9.13.tar.xz


# 重命名:
mv rabbitmq_server-3.9.13 rabbitmq


# 移动文件夹:
mv rabbitmq /usr/local/

5.配置环境变量

# 编辑/etc/profile文件
vim /etc/profile


#添加如下内容
export PATH=$PATH:/usr/local/rabbitmq/sbin


# 运行文件,让修改内容生效
source /etc/profile

6.开启管控台插件

rabbitmq-plugins enable rabbitmq_management

7.后台运行

# 创建配置文件夹
mkdir -p /usr/local/rabbitmq/etc/rabbitmq
# 创建配置文件
vim /usr/local/rabbitmq/etc/rabbitmq/rabbitmq.conf
# 添加如下内容
loopback_users=none


# 重启RabbitMQ
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

8.通过管控台访问RabbitMQ,路径:http://ip地址:15672,用户名:guest,密码:guest
9.此时会提示guest账户只允许本地使用,我们可以配置允许使用guest远程访问

# 创建配置文件夹
mkdir -p /usr/local/rabbitmq/etc/rabbitmq
# 创建配置文件
vim /usr/local/rabbitmq/etc/rabbitmq/rabbitmq.conf
# 添加如下内容
loopback_users=none


# 重启RabbitMQ
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

Dockers安装RabbitMQ

1.在虚拟机中安装docker

# 安装Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun


# 启动docker
systemctl start docker

2.拉取镜像

docker pull rabbitmq

3.启动RabbitMQ容器

docker run -d --hostname zhangsan --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq

4.开启管控台插件

# 查询rabbitmq容器ID
docker ps 
# 进入容器
docker exec -it 容器ID /bin/bash 
# 开启管控台插件
rabbitmq-plugins enable rabbitmq_management
# 退出容器
ctrl+p+q

5.通过管控台访问rabbitmq,路径:http://ip地址:15672,用户名:guest,密码:guest
6.关闭RabbitMQ容器

docker stop rabbit

账户管理

guest账户默认只允许本地使用,我们可以创建新账户远程访问RabbitMQ

1.创建账户

# 创建账户
rabbitmqctl add_user 用户名 密码

2.给用户授予管理员角色

rabbitmqctl set_user_tags 用户名 administrator

3.给用户授权

# "/"表示虚拟机
# itbaizhan表示用户名
# ".*" ".*" ".*" 表示完整权限
rabbitmqctl set_permissions -p "/" itbaizhan ".*" ".*" ".*"


总结

提示:这里对文章进行总结:

RabbitMQ 是一个强大而灵活的消息队列解决方案,能够帮助应用程序实现高性能、可靠的异步通信和数据处理。文章来源地址https://www.toymoban.com/news/detail-801071.html

到了这里,关于消息队列之RabbitMQ介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RabbitMQ:高效传递消息的魔法棒,一篇带你助力构建可靠的分布式系统(上篇)

    MQ是消息队列( Message Queue )的缩写,是一种在应用程序之间传递消息的技术。通常用于 分布式系统 或 异步通信 中,其中 发送者 将消息放入队列,而 接收者 从队列中获取消息。 这种异步通信模式允许发送者和接收者在不需要实时连接的情况下进行通信,从而提高了应用

    2024年02月15日
    浏览(35)
  • Python爬虫分布式架构 - Redis/RabbitMQ工作流程介绍

    在大规模数据采集和处理任务中,使用分布式架构可以提高效率和可扩展性。本文将介绍Python爬虫分布式架构中常用的消息队列工具Redis和RabbitMQ的工作流程,帮助你理解分布式爬虫的原理和应用。 为什么需要分布式架构? 在数据采集任务中,单机爬虫可能面临性能瓶颈和资

    2024年02月11日
    浏览(33)
  • 【分布式技术】消息队列Kafka

    目录 一、Kafka概述 二、消息队列Kafka的好处 三、消息队列Kafka的两种模式 四、Kafka 1、Kafka 定义 2、Kafka 简介 3、Kafka 的特性 五、Kafka的系统架构 六、实操部署Kafka集群  步骤一:在每一个zookeeper节点上完成kafka部署 ​编辑 步骤二:传给其他节点 步骤三:启动3个节点 kafka管理

    2024年01月23日
    浏览(41)
  • 分布式消息队列RocketMQ概念详解

    目录 1.MQ概述 1.1 RocketMQ简介 1.2 MQ用途 1.3 常见MQ产品 2.RocketMQ 基本概念 2.1 消息 2.2 主题 2.3 标签 2.4 队列  2.5 Producer 2.6 Consumer 2.7 NameServer 2.8 Broker 2.9 RocketMQ 工作流程   RocketMQ 是阿里开源的分布式消息中间件,跟其它中间件相比,RocketMQ 的特点是纯JAVA实现,是一套提供了消息

    2024年02月03日
    浏览(47)
  • 架构核心技术之分布式消息队列

    Java全能学习+面试指南:https://javaxiaobear.cn 今天我们来学习分布式消息队列,分布式消息队列的知识结构如下图。 主要介绍以下内容: 同步架构和异步架构的区别。异步架构的主要组成部分:消息生产者、消息消费者、分布式消息队列。异步架构的两种主要模型:点对点模型

    2024年02月07日
    浏览(32)
  • 【RabbitMQ笔记10】消息队列RabbitMQ之死信队列的介绍

    这篇文章,主要介绍消息队列RabbitMQ之死信队列。 目录 一、RabbitMQ死信队列 1.1、什么是死信队列 1.2、设置过期时间TTL 1.3、配置死信交换机和死信队列(代码配置) (1)设置队列过期时间 (2)设置单条消息过期时间 (3)队列设置死信交换机 (4)配置的基本思路 1.4、配置

    2024年02月16日
    浏览(49)
  • Spring Boot如何实现分布式消息队列

    在分布式系统中,消息队列是非常重要的一部分,可以帮助开发人员实现异步处理、解耦系统、提高系统可靠性等。本文将介绍如何使用 Spring Boot 实现分布式消息队列。 消息队列是一种存储消息的容器,可以缓存消息并在需要的时候按照一定的规则将消息发送给消费者。常

    2024年02月14日
    浏览(31)
  • 分布式消息队列Kafka(四)- 消费者

    1.Kafka消费方式 2.Kafka消费者工作流程 (1)总体工作流程 (2)消费者组工作流程 3.消费者API (1)单个消费者消费 实现代码 (2)单个消费者指定分区消费 代码实现: (3)消费者组消费 复制上面CustomConsumer三个,同时去订阅统一个主题,消费数据,发现一个分区只能被一个

    2023年04月26日
    浏览(36)
  • Rabbitmq----分布式场景下的应用

    如果单机模式忘记也可以看看这个快速回顾rabbitmq,在做学习 消息队列在使用过程中,面临着很多实际问题需要思考: 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送时丢失: 生产者发送的消息未送达exchange 消

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包