RabbitMQ_基础篇

文章目录

  • 第一章 消息中间件
    • 1.1 应用场景
    • 1.2 常用消息中间件
      • 1.2.1 ActiveMQ
      • 1.2.2 RabbitMQ
      • 1.2.3 RocketMQ
      • 1.2.4 Kafka
  • 第二章 RabbitMQ
    • 2.1 为什么选择RabbitMQ
    • 2.2 RabbitMQ简介
    • 2.3 RabbitMQ架构
    • 2.4 RabbitMQ工作模式
      • 2.4.1 Hello World
      • 2.4.2 Work Queues
      • 2.4.3 Publish/Subscribe
      • 2.4.4 Routing
      • 2.4.5 Topics

第一章 消息中间件

1.1 应用场景

  • 异步任务处理:将耗时的任务放入消息队列,异步处理,提高系统的响应速度。
  • 系统解耦:通过消息队列,系统之间解耦,实现松耦合的架构,方便扩展和维护。
  • 数据同步:通过消息队列实现不同系统之间的数据同步,确保数据的一致性。
  • 削峰填谷:通过消息队列,可以控制系统的并发压力,防止服务过载。
  • 日志收集:将日志信息发送到消息队列,实现集中式的日志管理和统计分析。

1.2 常用消息中间件

1.2.1 ActiveMQ

我们先看ActiveMQ。其实一般早些的项目需要引入消息中间件,都是使用的这个MQ,但是现在用的确实不多了,说白了就是有些过时了。我们去它的官网看一看,你会发现官网已经不活跃了,好久才会更新一次。

它的单机吞吐量是万级,一些小的项目已经够用了,但对于高并发的互联网项目完全不够看。

在高可用上,使用的主从架构的实现。
在消息可靠性上,有较低的概率会丢失数据。
综合以上,其实这个产品基本可以弃用掉了,我们完全可以使用RabbitMQ来代替它。

1.2.2 RabbitMQ

RabbitMQ出现后,国内大部分公司都从ActiveMQ切换到了RabbitMQ,基本代替了activeMQ的位置。它的社区还是很活跃的。

它的单机吞吐量也是万级,对于需要支持特别高的并发的情况,它是无法担当重任的。

在高可用上,它使用的是镜像集群模式,可以保证高可用。
在消息可靠性上,它是可以保证数据不丢失的,这也是它的一大优点

同时它也支持一些消息中间件的高级功能,如:消息重试、死信队列等。

但是,它的开发语言是erlang,国内很少有人精通erlang,所以导致无法阅读源码。
对于大多数中小型公司,不需要面对技术上挑战的情况,使用它还是比较合适的。而对于一些BAT大型互联网公司,显然它就不合适了。

1.2.3 RocketMQ

接下来我们来讨论一下我比较喜欢的RocketMQ,它是阿里开源的消息中间件,久经沙场,非常靠谱。

它支持高吞吐量,能达到10万级,能承受互联网项目高并发的挑战。

在高可用上,它使用的是分布式架构,可以搭建大规模集群,性能很高。
在消息可靠性上,通过配置,可以保证数据的绝对不丢失。
同时它支持大量的高级功能,如:延迟消息、事务消息、消息回溯、死信队列等等。

它非常适合应用于java系统架构中,因为它使用java语言开发的,我们可以去阅读源码了解更深的底层原理。

目前来看,它没有什么特别的缺点,可以支持高并发下的技术挑战,可以基于它实现分布式事务,大型互联网公司和中小型公司都可以选择使用它来作为消息中间件使用,如果我来做技术选型,我首选的中间件就是它。

1.2.4 Kafka

kafka的吞吐量被公认为中间件中的翘楚,单机可以支持十几万的并发,相当强悍。

在高可用上同样支持分布式集群部署。

在消息可靠性上,如果保证异步的性能,可能会出现消息丢失的情况,因为它保存消息时是先存到磁盘缓冲区的,如果机器出现故障,缓冲区的数据是可能丢失的。

它的功能非常的单一,就是消息的接收与发送,因此不适合应用于许多场景。

它在行业内主要应用于大数据领域,使用它进行用户行为日志的采集和计算,来实现比如“猜你喜欢”的功能。

所以,如果没有大数据的需求,一般不会选择它

引用:RabbitMQ详解,用心看完这一篇就够了【重点】

第二章 RabbitMQ

2.1 为什么选择RabbitMQ

  • ActiveMQ,性能不是很好,因此在高并发的场景下,直接被pass掉了。它的 Api 很完善,在中小型互联网公司可以去使用。
  • kafka主要强调高性能,如果对业务需要可靠性消息的投递的时候。那么就不能够选择kafka了。但是如果做一些日志收集呢,kafka还是很好的。因为kafka的性能是十分好的。
  • RocketMQ,它的特点非常好。它高性能、满足可靠性、分布式事物、支持水平扩展、上亿级别的消息堆积、主从之间的切换等等。MQ的所有优点它基本都满足。但是它最大的缺点:商业版收费。因此它有许多功能是不对外提供的。

2.2 RabbitMQ简介

  RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。AMQP :Advanced Message Queue Potocal,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。RabbitMQ最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

2.3 RabbitMQ架构

在这里插入图片描述

  • Broker(服务器):即RabbitMQ Server,也叫Broker server,接收和分发消息的应用,保证数据能够按照指定的方式进行传输。
  • Connection(连接):Producer/Consumer 和 broker 之间的 TCP 连接,在消息发送时必须要先建立与RabbitMQ服务器的连接。
  • Channel(信道):建立在Connection中,消息是基于Channel传递的,Channel之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销;如果每一次访问RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection的开销将是巨大的,效率也较低。
  • VirtualHost(虚拟主机):exchange/queue是属于某个VirtualHost的,VirtualHost属于某个用户的;VirtualHost可以分配用户在创建交换机或队列时可以指定其属于哪个虚拟主机,方便用户管理交换机和队列。
  • Producer(生产者): 消息的生产者,数据的发送方。消息生产者连接RabbitMQ服务器然后将消息投递到Exchange。
  • Exchange(交换机):生产者将消息发送到 Exchange(交换器),由 Exchange将消息路由到一个或多Queue 中(或者丢弃)。Exchange 并不存储消息。RabbitMQ 中的 Exchange 有directfanouttopicheaders 四种类型,每种类型对应不同的路由规则。
  • Queue(队列):是RabbitMQ的内部对象,用于存储消息。消息消费者就是通过订阅队列来获取消息;RabbitMQ 中的消息都只能存储在Queue中,生产者生产消息并最终投递到Queue 中,消费者可以从 Queue 中获取消息并消费。多个消费者可以订阅同一个Queue,这时 Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。
    在这里插入图片描述

2.4 RabbitMQ工作模式

RabbitMQ官网地址

2.4.1 Hello World

在这里插入图片描述
  简单模式中表现为一个生产者对应一个消费者,生产者(Producer)生产消息发送到队列,消费者(Consumer)监听此队列,进行消息的消费;

2.4.2 Work Queues

在这里插入图片描述
  Work模式与Simple模式几乎是一模一样的,只不过我们在只有一个Producer和一个Consumer时习惯把这种模式称为Simple模式,而当一个Producer有多个Consumer时我们把这样的模式成为Work模式,因此Work模式和Simple模式的代码是一模一样的,只不过是多个Consumer监听同一个队列而已;

2.4.3 Publish/Subscribe

在这里插入图片描述
  在发布订阅模式中,Producer发送消息到指定的交换机(Exchange)中,由Exchange绑定不同的Queues,消费者依旧监听这些队列进行消费(work模式使用的是默认的交换机,空字符串"")。
  一个Exchange可以有directtopicheadersfanout四种类型,不同类型的Exchange具备不同的消息路由功能,Pub/Sub模式则重点强调的是fanout类型的Exchange交换模式,Pub/Sub模式也叫分列模式

需要注意的两点:
1、work、simple也会有交换机,他们使用的是默认的交换机
2、Exchange还可以绑定到另一个Exchange上

2.4.4 Routing

在这里插入图片描述
  Pub/Sub订阅强调的是Fanout类型的Exchange,Routing模式则强调的是Exchange的direct模式,Routing模式也叫直连模式

2.4.5 Topics

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/843655.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分离式网络变压器的集成化设计替代传统网络变压器(网络隔离滤波器)尝试

Hqst盈盛(华强盛)电子导读:今天分享的是应用了分离式网络变压器设计的的新型网络变压器(网络隔离变压器) 今天我们一起来看这款新型网络变压器,它就是应用分离式网络变压器集成到电路板上,加上外…

googleTest 源码主线框架性分析

本文备忘一个主题的分析过程和结论,即,googleTest框架中是如何调用相关的测试宏的? TEST TEST_F TEST_P 等等 1,googleTest 环境与简单示例 1.1 下载 googletest 并编译 下载: $ git clone https://github.com/goog…

linux环境安装mongoDB

一、安装单体mogodb 目标:在Linux中部署一个单机的MongoDB,作为生产环境下使用。 提示:和Windows下操作差不多。 步骤如下: (1)先到官网下载压缩包 mongod-linux-x86_64-4.0.10.tgz 。 (2&…

细说MCU用定时器控制ADC采样频率的实现方法并通过Simulink查看串口输出波形

目录 一、硬件工程 二、建立Simulink模型 1.安装MATLAB和Simulink 2.建立Simulink模型 三、代码修改 1.修改回调函数 2.产看结果 3.完整的main.c 本文作者的文章 细说MCU用定时器控制ADC采样频率的实现方法-CSDN博客 https://wenchm.blog.csdn.net/article/details/…

《python语言程序设计》第6章4题反向显示一个整数,使用函数reverse 实现 4位数

* def reverse(n):a n // 1000b n % 1000 // 100c n % 1000 % 100 // 10d n % 100 % 10return str(d) str(c) str(b) str(a)numberT 3456 aText reverse(numberT) print(f"{numberT} is reverse number {aText}")

Spring的IoC与DI介绍

Spring基础 Spring Framework系统架构 Spring Framework是Spring生态圈中最基础的项目,是其它项目的根基。 IoC(Inversion ofControl)控制反转 使用对象时,由主动new产生对象转换为由外部提供给对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。Sprin…

AP ERP与汉得SRM系统集成案例(制药行业)

一、项目环境 江西某医药集团公司,是一家以医药产业为主营、资本经营为平台的大型民营企业集团。公司成立迄今,企业经营一直呈现稳健、快速发展的态势, 2008 年排名中国医药百强企业前 20 强,2009年集团总销售额约38亿元人民币…

监控易V7.6.6.15升级详解15:智能预测管理功能

随着企业IT系统的日益复杂和运维需求的不断提高,传统的监控管理方式已经难以满足现代企业的需求。为了应对这一挑战,监控易系统近期对智能预测管理功能进行了全面升级。本次升级不仅优化了原有功能,还新增了一系列实用特性,旨在为…

openstack设置IP直接登录,不需要加dashboard后缀

openstack 实验环境,openstack-t版,centos2009 修改配置文件 [rootcontroller ~]# vim /WEBROOT /etc/openstack-dashboard/local_settings #将dashboard去掉 WEBROOT /dashboard/ #改为 WEBROOT /[rootcontroller ~]# vim /etc/httpd/conf.d/openst…

交叉编译ethtool(ubuntu 2018)

参考文章:https://www.cnblogs.com/nazhen/p/16800427.html https://blog.csdn.net/weixin_43128044/article/details/137953913 1、下载相关安装包 //ethtool依赖libmul git clone http://git.netfilter.org/libmnl //ethtool源码 git clone http://git.kernel.or…

yolov5进行识别安全帽

进行毕业设计 下载yolov5使用按照教程来进行就行注意事项(有必要看看)效果 总结 下载yolov5 地址是:https://github.com/ultralytics/yolov5 使用按照教程来进行就行 这里简单说一下: 下载需要的命令: pip install -…

腾讯元宝上线“3D角色梦工厂”:快速生成专属3D角色!

7月16日,腾讯旗下大模型应用“腾讯元宝”上线“3D角色梦工厂”,允许用户通过上传一张五官清晰的正面头像,并选择不同的角色模板,迅速生成个人3D角色! 技术特点 “3D角色梦工厂”将大模型生成技术与3D应用相结合&#…

【开发实战】QT5 + OpenCV4 开发环境配置应用演示

前言 作为深度学习算法工程师,必须要掌握应用开发技能吗?搞工程肯定是必须要会界面开发,QT就是一个很不错的选择。本文以QT5.15 OpenCV4.8 OpenVINO2023为例,搭建应用开发环境,演示深度学习模型的QT应用案例。 开发…

提前批不要盲目投!

大家好,我是洋子,最近25届秋招提前批陆续开始了,特别是大厂,比如百度,深信服,OPPO等陆续已经启动提前批招聘 前几天我在群里发了百度的秋招提前批内推码进行内推,今天打开内推系统一看全凉了 …

PACS-医学影像信息管理系统,全影像科室PACS源码,内置包括MPR、CMPR、VR等三维处理功能

PACS系统可以覆盖医院现有放射、CT、MR、核医学、超声、内镜、病理、心电等绝大部分DICOM和非DICOM检查设备,支持从科室级、全院机、集团医院级乃至到区域PACS的平滑扩展,能够与医院HIS、集成平台的有效集成和融合,帮助医院实现了全院医学影像…

园区AR导航系统构建详解:从三维地图构建到AR融合导航的实现

随着现代园区规模的不断扩大与功能的日益复杂,传统的二维地图导航已难以满足访客高效、精准定位的需求。园区内部错综复杂的布局、频繁变更的商户位置常常让访客感到迷茫,造成寻路上的时间浪费。园区AR导航系统以创新的技术手段,破解了私域地…

基于天地图使用Leaflet.js进行WebGIS开发实战

目录 前言 一、天地图的key 1、创建应用 2、调用限制策略 注: (1)日服务调用超量会暂时拒绝访问,次日自动开启; (2)如果服务调用过程中存在数据爬取或者下载行为,服务调用会被自…

【BUG】已解决:AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘

AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘ 目录 AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘ 【常见模块错误】 【错误原因】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&…

C语言 打印菱形的程序(Program to print the Diamond Shape)

给定一个数字n &#xff0c;编写一个程序来打印一个有2n行的菱形。 例子 &#xff1a; // C program to print // diamond shape with // 2n rows #include<stdio.h> // Prints diamond // pattern with 2n rows void printDiamond(int n) { int space n - 1; …

用Python实现Cmpp协议的教程

引言&协议概述 &#xff08;CMPP&#xff09;是中国移动为实现短信业务而制定的一种通信协议&#xff0c;用于在客户端&#xff08;SP&#xff0c;Service Provider&#xff09;和中国移动短信网关之间传输短消息&#xff0c;有时也叫做移动梦网短信业务。CMPP3.0是该协议…