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版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
10月前
|
缓存 前端开发 JavaScript
componentWillMount()方法有什么用
componentWillMount() 是 React 组件生命周期中的一个方法,在组件首次渲染之前调用。可以用来进行初始化操作,如设置状态或加载数据,但不建议在此方法中执行复杂的异步操作。注意,此方法在 React 16.3 版本后已被标记为不安全,建议使用替代方法。
|
Shell Windows
windows出现错误0x800401E5:没有供标记使用的对象
windows出现错误0x800401E5:没有供标记使用的对象
windows出现错误0x800401E5:没有供标记使用的对象
|
10月前
|
存储 关系型数据库 数据库
数据备份和恢复的常见技术
【10月更文挑战第28天】数据备份和恢复的常见技术
|
JavaScript 网络安全 开发工具
[保姆级-从0到1]利用hexo+github托管实现搭建个人博客
[保姆级-从0到1]利用hexo+github托管实现搭建个人博客
|
10月前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关
272 1
Gateway服务网关
|
10月前
|
存储 NoSQL MongoDB
MongoDB面试专题33道解析
大家好,我是 V 哥。今天为大家整理了 MongoDB 面试题,涵盖 NoSQL 数据库基础、MongoDB 的核心概念、集群与分片、备份恢复、性能优化等内容。这些题目和解答不仅适合面试准备,也是日常工作中深入理解 MongoDB 的宝贵资料。希望对大家有所帮助!
278 7
|
10月前
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
204 3
|
11月前
|
数据可视化 安全 数据挖掘
全面盘点:项目经理必备的产品管理工具!
在快节奏的商业环境中,产品管理工具如板栗看板、Jira、Smartsheet、Trello、Monday.com、Asana 和 Basecamp 等,对于提升团队效率和促进跨部门协作至关重要。这些工具各具特色,支持从项目跟踪到任务管理的各个方面,帮助团队顺利完成从概念到市场的产品开发过程。选择合适的工具时,应考虑功能匹配度、用户体验、成本效益、集成能力和安全性等因素。
|
数据采集 人工智能 物联网
用Gamma一键生成PPT,智能AI改变未来工作方式
用Gamma一键生成PPT,智能AI改变未来工作方式
2372 1
用Gamma一键生成PPT,智能AI改变未来工作方式