首页 > 其他分享 >RabbitMQ初步学习

RabbitMQ初步学习

时间:2023-02-01 11:44:57浏览次数:60  
标签:学习 队列 RabbitMQ TCP 初步 信道 MQ 消息 路由

一:什么是MQ?

MQ是消息队列,主要为了解决传统消息传递上管理困难的问题。

MQ有三大优点:

异步、削峰、解耦

异步:比如淘宝,当下了订单后,系统会走积分系统、物流系统、供货商系统等,如果是串行,那走完一个订单所需要的时间就是走完所有子系统时间总和。当异步时,走完订单系统,不需要知道后续系统的运行情况,还可以继续发送其他信息。

削峰:比如经典的双十一期间,电商系统会面临极大的压力,在短时间内,会有极大量的消息发送给服务器,这时候服务器极有可能因为消息处理不过来而导致宕机。而MQ的削峰特性刚好能让所有消息排好队慢慢处理,不至于让系统处于负载状态,极大缓解了系统压力。

解耦:传统消息通讯方式,无论是哪一方都要维护供外部通讯的接口而且各方处理消息能力有限,效率较低,耦合度较高,当使用了MQ后,发送方只需要将消息发给MQ,后续MQ如何在处理就不需要管了,接口维护等操作都是MQ在处理。

 

MQ缺点:

系统可用性降低、数据一致性问题、系统复杂度提高

系统可用性降低:当所有子系统都连接在MQ上时,如果MQ挂了,将会导致整体系统无法运行。可以用集群解决。

数据一致性:当B、C系统都写入数据成功,D系统却写入数据失败。

系统复杂度:加入MQ后,如何保证数据没有重复消费,没有消息丢失。

 

二:什么是RabbitMQ

(1)生产者Publisher:生产消息,就是投递消息的一方。消息一般包含两个部分:消息体(payload)和标签(Label)
(2)消费者Consumer:消费消息,也就是接收消息的一方。消费者连接到RabbitMQ服务器,并订阅到队列上。消费消息时只消费消息体,丢弃标签。
(3)Broker服务节点:表示消息队列服务器实体。一般情况下一个Broker可以看做一个RabbitMQ服务器。
(4)Queue:消息队列,用来存放消息。一个消息可投入一个或多个队列,多个消费者可以订阅同一队列,这时队列中的消息会被平摊(轮询)给多个消费者进行处理。
(5)Exchange:交换器,接受生产者发送的消息,根据路由键将消息路由到绑定的队列上。
(6)Routing Key: 路由关键字,用于指定这个消息的路由规则,需要与交换器类型和绑定键(Binding Key)联合使用才能最终生效。
(7)Binding:绑定,通过绑定将交换器和队列关联起来,一般会指定一个BindingKey,通过BindingKey,交换器就知道将消息路由给哪个队列了。
(8)Connection :网络连接,比如一个TCP连接,用于连接到具体broker
(9)Channel: 信道,AMQP 命令都是在信道中进行的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接,一个TCP连接可以用多个信道。客户端可以建立多个channel,每个channel表示一个会话任务。
(10)Message:消息,由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。
(11)Virtual host:虚拟主机,用于逻辑隔离,表示一批独立的交换器、消息队列和相关对象。一个Virtual host可以有若干个Exchange和Queue,同一个Virtual host不能有同名的Exchange或Queue。最重要的是,其拥有独立的权限系统,可以做到 vhost 范围的用户控制。当然,从 RabbitMQ 的全局角度,vhost 可以作为不同权限隔离的手段。

以上解释来自于下面链接:https://blog.csdn.net/a745233700/article/details/115060109

 

三:交换机路由消息到队列

有4种方式:

fanout:广播方式

会将消息广播传递给所有绑定了此交换机的队列。

 

 

 

 

 

将消息分发给所有绑定了此交换机的队列

direct:路由方式

交换机和队列绑定了key,只有当交换机的key和队列的key相同,才能传递消息。

 

 

 同时,交换机也支持多重绑定。不同的队列可以用相同的Binding key与同一交换机绑定。如下图,当消息的Routing key为black时,消息将进入 Q1 和 Q2。

 

 

 topic:主题方式

可以模糊搜索路由到队列

交换机和队列的Binding key用通配符来表示,有两种语法:

  • * 可以替代一个单词;

  • # 可以替代 0 或多个单词;

headers参数方式

 不常用,自行搜索了解。

以上4种方式图来自于:https://blog.csdn.net/w15558056319/article/details/123373383

 

 四:消息发送原理

信道是TCP连接。

不直接用TCP,而是转换为AMQP信道的原因是,TCP连接/断开的消耗太大。

 信道是创建在“真实”TCP上的虚拟连接,AMQP命令都是通过信道发送出去的,每个信道都会有一个唯一的ID,不论是发布消息,订阅队列或者介绍消息都是通过信道完成的。

 

标签:学习,队列,RabbitMQ,TCP,初步,信道,MQ,消息,路由
From: https://www.cnblogs.com/baitaotao/p/17078887.html

相关文章

  • 【FFH】 gn项目构建工具学习记录
    gn项目构建工具学习我们为何要使用构建工具?对于一个新手入门简单的helloworld程序而言,我们可以直接使用gcc命令对其进行编译。对于OpenHarmony系统而言,代码规模庞大,再想要......
  • RabbitMQ在服务里查看显示已经成功,但无法访问web端
    参考链接:https://blog.csdn.net/weixin_42753193/article/details/128770009 网上大多数方法大致如下:1、进入安装目录cd你的RabbitMQ安装目录\sbin2、打开节点:r......
  • 使用chatGPT助力英语学习
    chatGPT支持多语言,如果使用的好,可以极大的提高我们英语学习的效率,当然,对语文的学习chatGPT同样可以帮助到我们,本文先用一个简单的例子示范一下英语学习。大多数孩子英语词......
  • vim 一些插件的学习
    1.neoformat:Neoformat,输入命令之后按空格+tab键进行选择格式化的程序,项目地址:https://github.com/sbdchd/neoformat2.vim-multiple-cursors选中任意文本后,使用Ct......
  • BrootStrap学习笔记
    BrootStrap学习笔记  col-xs/col-sm/col-md/col-lg/col-xl总结*表示当前div所占的列数(共12列);col-sm-3表示该div在小屏幕中占6列,.col-xs-*column-extrasmal......
  • Git初识之学习心得总结
    一、Git简介--1.Git是什么?1.是一个分布式版本控制系统2.以"行"为单位进行存储,可以监控每行的变化3.几乎所有的软件的代码管理现在都在使用git.--2.Git的作用:a、"......
  • PostgreSQL学习笔记-4.基础知识:触发器、索引
    PostgreSQL触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。下面是关于PostgreSQL触发器几个比较重要的点:PostgreSQL触发器可以在BEFORE、AFT......
  • RabbitMq使用中常见错误--python版
    用python的pika库错误集 一、pika.exceptions.ProbableAuthenticationError:ConnectionClosedByBroker:(403)‘ACCESS_REFUSED-Loginwasrefusedusingauthentica......
  • 学习方法:阅读学习法
    学习方法:阅读学习法    阅读学习法,也就是通过“阅读书籍”来获取知识。  “主题阅读”,以“主题”为主线,搜集材料并阅读、整理,达到多角度、多层次的......
  • 【Javaweb】jsp | 简单学习
    什么是jsp,它有什么用?jsp的全称是javaserverpages。Java的服务器界面。jsp的主要作用是代替Servlet程序回传html页面的数据因为Servlet程序回传html页面数据是一件非常......