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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
5月前
|
消息中间件 资源调度 网络协议
【我们一起来学 RabbitMQ 一 】RabbitMQ 的基本介绍
【我们一起来学 RabbitMQ 一 】RabbitMQ 的基本介绍
|
3月前
|
消息中间件 Shell Linux
RabbitMQ部署指南
RabbitMQ部署指南
58 2
|
3月前
|
消息中间件 Java Maven
什么是RabbitMQ?它的主要功能是什么?
什么是RabbitMQ?它的主要功能是什么?
45 0
|
7月前
|
消息中间件 弹性计算 监控
部署RabbitMQ
本场景带您体验如何在CentOS 7.7 64位操作系统的云服务器上部署RabbitMQ。
89 0
|
9月前
|
消息中间件 存储 Java
【RabbitMQ二】——RabbitMQ入门教程(简单模式)
【RabbitMQ二】——RabbitMQ入门教程(简单模式)
73 1
|
9月前
|
消息中间件 存储 运维
RabbitMQ:基础篇
MQ:消息队列(message queue): 顾名思义,MQ本质是个队列,FIFO先入先出,只不过队列中存放的内容是message,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务
114 2
RabbitMQ:基础篇
|
11月前
|
消息中间件 存储 网络协议
RabbitMQ详解(一):RabbitMQ相关概念
RabbitMQ详解(一):RabbitMQ相关概念
412 0
|
消息中间件 缓存 负载均衡
RabbitMQ学习(十一):RabbitMQ 集群
前面我们介绍了如何安装及运行 RabbitMQ 服务,不过这些是单机版的,无法满足目前真实应用的 要求。如果 RabbitMQ 服务器遇到内存崩溃、机器掉电或者主板故障等情况,该怎么办?单台 RabbitMQ 服务器可以满足每秒 1000 条消息的吞吐量,那么如果应用需要 RabbitMQ 服务满足每秒 10 万条消息的吞 吐量呢?购买昂贵的服务器来增强单机 RabbitMQ 务的性能显得捉襟见肘,搭建一个 RabbitMQ 集群才是 解决实际问题的关键。
182 0
RabbitMQ学习(十一):RabbitMQ 集群
|
消息中间件 存储 数据可视化
1、RabbitMQ教程-RabbitMQ简介
1、RabbitMQ教程-RabbitMQ简介
103 0
1、RabbitMQ教程-RabbitMQ简介
|
消息中间件 存储 NoSQL