RabbitMQ基础

简介: RabbitMQ入门

1、前言

学习一门技术,首先要知道它能帮我们解决哪些问题,带着这个疑问去探索可以事半功倍。

痛点1:

业务复杂,需要同步调用多个系统的接口,总耗时较长,用户体验差。

痛点2:

比如系统A需要和多个系统交互,如果其它系统改变或者新增系统,那么A系统就需要改代码,这样系统之间耦合度较高。

总结:

消息中间件最大的作用就是:异步处理、系统解耦;  此外还可以作为消息广播、流量控制。

2、相关概念

我们根据架构原理图上涉及到的来看:

  • 生产者(Publisher):发送消息的应用。
  • 消费者(Consumer):接收消息的应用。
  • 连接(Connection)它使用TCP进行可靠的传输,连接RabbitMQ和应用服务器。
  • 信道(Channel):连接里的一个虚拟通道,通过消息队列发送或者接收消息时,都是通过信道进行的。Connection内部建立的逻辑连接,通常每个线程创建单独的Channel。
  • 交换机(Exchange):交换机负责从生产者那里接收消息,并根据交换类型分发到对应的消息队列里。换种理解:快递分拣中心。
  • 队列(Queue)它们存储应用程序发送的消息。
  • 代理(Broker):接收和分发消息的应用,RabbitMQ Server就是Message Broker。
  • 消息(Message):由生产者通过RabbitMQ发送给消费者的信息。
  • 绑定(Binding)绑定是交换机用来将消息路由到队列的规则。
  • 路由键(Routing Key):消息的目标地址。换种理解:寄快递填写的地址。
  • 虚拟主机(Virtual host):出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue 等。

3、灵魂——Exchange

交换机是RabbitMQ的核心组件,交换机接收消息并将其路由到零个或多个队列中。所使用的路由算法取决于绑定的交换类型和规则。Exchange有以下4种:

Name(交换机类型)

Default pre-declared names(预声明的默认名称)

Direct exchange(直连交换机)

(Empty string) and amq.direct

Fanout exchange(扇型交换机)

amq.fanout

Topic exchange(主题交换机)

amq.topic

Headers exchange(头交换机)

amq.match (and amq.headers in RabbitMQ)

3.1直连交换机

直连交换机根据消息路由键将消息传递到队列,队列使用路由键K绑定到交换机。当具有路由键R的新消息到达直连交换机时,如果K = R,则交换机将其路由到队列。

如果多个队列绑定到具有相同路由键K的直连交换机,则交换机将消息路由到K = R的所有队列。

3.2 扇出交换机

扇出交换机将消息路由给绑定到它身上的所有队列,而忽略路由键如果有N个队列绑定到一个扇出交换机,当新消息发布到该交换机时,该消息的副本将被传递到这N个队列。

3.3主题交换机

主题交换机通过对消息的路由键和队列到交换机的绑定模式之间的匹配,将消息路由给一个或多个队列。主题交换机经常用来实现各种分发/订阅模式及其变种。

  • * 表示匹配任意一个单词
  • # 表示匹配任意个数单词

主题交换器非常强大,可以像其他类型的交换器一样工作:

  • 当一个队列的绑定键是"#"是,它将会接收所有的消息,而不再考虑所接收消息的路由键,就像是fanout交换器一样;
  • 当一个队列的绑定键没有用到”#“和”*“时,它又像direct交换一样工作。

3.4头交换机

头交换机是根据消息header值而不是routing key将消息路由到队列的交换器。

生产者在消息头中以键值对的形式添加一些值,并将其发送到headers exchange,收到消息后,headers exchange尝试将所有或任何(基于x-match的值)header值与绑定到它的所有队列的值匹配。 如果找到匹配,则将消息路由到绑定值匹配的队列,如果未找到匹配,则忽略该消息。

当"x-match"参数被设置为"any"时,只要一个匹配的头值就足够了。或者,将“x-match”设置为“all”要求所有值必须匹配。

4、控制台

这里就不说安装搭建了,百度一下吧。直接来看一看RabbitMQ的控制台:

也是在管理页面创建我们的虚拟机和用户。

这里我们新建一个虚拟机和用户,后续使用。

新建一个用户,账号密码自定义。

用户添加后可以看到他没有可以访问的虚拟机,点击用户名进入设置

把虚拟机demo分配给此用户

下一篇整合SpringBoot来实际使用RabbitMQ。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
12月前
|
消息中间件 资源调度 网络协议
【我们一起来学 RabbitMQ 一 】RabbitMQ 的基本介绍
【我们一起来学 RabbitMQ 一 】RabbitMQ 的基本介绍
|
1月前
|
消息中间件 数据采集 中间件
RabbitMQ的使用—实战
RabbitMQ的使用—实战
|
5月前
|
消息中间件 存储 监控
RabbitMQ 技术
【6月更文挑战第12天】
44 2
|
5月前
|
消息中间件 监控 数据安全/隐私保护
RabbitMQ 技术详解与应用指南
**RabbitMQ** 是一个开源消息代理,基于 AMQP 实现,用于应用程序间轻量、可靠的消息传递。本文档详细介绍了 RabbitMQ 的基础,包括**消息、队列、交换机、绑定、路由键和消费者**等概念,以及其**高可靠性、高性能、灵活性、可扩展性和易用性**等特性。RabbitMQ 使用生产者-消费者模型,消息通过交换机路由到队列,消费者接收并处理。文中还涵盖了安装配置的基本步骤和常见应用场景,如**异步处理、消息推送、系统解耦、流量削峰和日志收集**。
488 2
|
6月前
|
消息中间件 Shell Linux
RabbitMQ部署指南
RabbitMQ部署指南
145 2
|
6月前
|
消息中间件 Java Maven
什么是RabbitMQ?它的主要功能是什么?
什么是RabbitMQ?它的主要功能是什么?
133 0
|
消息中间件 存储 运维
RabbitMQ:基础篇
MQ:消息队列(message queue): 顾名思义,MQ本质是个队列,FIFO先入先出,只不过队列中存放的内容是message,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务
181 2
RabbitMQ:基础篇
|
消息中间件 存储 Java
【RabbitMQ二】——RabbitMQ入门教程(简单模式)
【RabbitMQ二】——RabbitMQ入门教程(简单模式)
104 1
|
消息中间件 弹性计算 监控
部署RabbitMQ
本场景带您体验如何在CentOS 7.7 64位操作系统的云服务器上部署RabbitMQ。
|
消息中间件 存储 网络协议
RabbitMQ详解(一):RabbitMQ相关概念
RabbitMQ详解(一):RabbitMQ相关概念
474 0