RabbitMQ 基础篇 | 黑马

news2025/1/12 2:45:22

目录

一、RabbitMQ简介

1、AMQP

2、基本概念

3、工作模式

4、JMS

5、小结

二、快速入门

简单模式

生产者

消费者

三、工作模式

1、Work queues 工作队列模式

 2、Pub/Sub 订阅模式

3、Routing 路由模式

4、Topics 通配符模式

四、SpringBoot整合RabbitMQ

1、生产者

2、消费者

3、小结


一、RabbitMQ简介

1、AMQP

AMQP,即 Advanced Message Queuing Protocol (高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年,AMQP 规范发布。类比HTTP

2007年Rabbit 技术公司基于AMQP 标准开发的 RabbitMQ1.0 发布。

RabbitMQ采用 Erlang 语言开发,Erlang 语言由 Ericson 设计,专门为开发高并发和分布式系统的一种语言,在电信领域使用广泛。

2、基本概念

Brocker:接收和分发消息的应用(RabbitMQ Server)

Virtual host:逻辑分区的概念,类似于网络中的namespace,当多个不同用户使用同一个rabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等

Connection:publisher/consumer 和 broker 之间的TCP连接

Channel:如果每次访问RabbitMQ都建立Connection。在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。Channel是connection内部建立的逻辑连接,如果应用程序支持多线程,每个thread创建单独的channel进行通信,AMQP method包含了channel id帮助客户端和message broke识别channel,所以channel之间完全是隔离的。channel作为轻量级的connection极大减少了操作系统建立TCP connection的开销。

Exchange:message到达broker的第一站,根据分发规则,匹配查询表中的routing key,分发消息到queue中去

Queue:消息最终被送到这里等待consumer取走

Binding:exchange和queue之间的虚拟连接,binding中包含了routing key,binding信息被包含到exchange查询表中,用户message分发依据

3、工作模式

RabbitMQ 提供了6 种工作模式:简单模式、work queues、Publish/Subscribe 发布与订阅模式、Routing路由模式、Topics 主题模式、pC 远程调用模式(程调用,不太算 MQ;暂不作介绍)。

4、JMS

  • JMS即Java消息服务应用程序接口,是一个Java平台中关于面向消息中间件的API
  • JMS 即Java 消息服务(JavaMessage Service) 应用程序接口,是一个Java 平台中关于面向消息中间件的API
  • JMS 是JavaEE 规范中的一种,类比JDBC
  • 很多消息中间件都实现了JMS规范,例如: ActiveMQ。RabbitMO 官方没有提供JMS 的实现包,但是开源社区有

5、小结

  • RabbitMQ是基于AMQP 协议使用 Erlang 语言开发的一款消息队列产品。
  • RabbitMQ提供了6种工作模式,我们学习5种。这是今天的重点。
  • AMQP 是协议,类比HTTP
  • JMS 是API 规范接口,类比JDBC

二、快速入门

简单模式

生产者

先创建两个模块一个生产者模块一个消费者的,然后分别引入rabbitMQ的依赖

消费者

前面连接跟生产者的一样,就接收消息的发方法不一样用下面这个 

三、工作模式

1、Work queues 工作队列模式

多个消费者共同消费同个队列的消息,他们两个只有一个能拿到消息

一个队列中如果有多个消费者,那么消费者之间对于同一个消息关系是竞争关系

应用场景:对于任务过重或任务较多情况使用工作队列可以提高任务处理速度,比如发短信服务器部署多个,只需要一个交接点成功发送即可。

 2、Pub/Sub 订阅模式

在订阅模型中,多了一个Exchange 角色,而且过程略有变化:

  • P:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X(交换机)
  • C:消费者,消息的接收者,会一直等待消息到来
  • Queue:消息队列,接收消息、缓存消息
  • Exchange: 交换机(X)。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有常见以下3种类型:
    • >Fanout:广播,将消息交给所有绑定到交换机的队列
    • >Direct:定向,把消息交给符合指定routing key的队列
    • >Topic:通配符,把消息交给符合routing pattern (路由模式) 的队列

Exchange (交换机) 只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与 Exchange 绑定,或者没有符合路由规则的队列,那么消息会丢失!

创建交换机的参数:

3、Routing 路由模式

比如我们要让一个队列是发到保存数据库的,一个是输出控制台的,数据库只保存error,控制台都数据,这个时候就需要用到路由模式来匹配

  • 队列与交换机的绑定,不能是任意绑定了,而是要指定一个 RoutingKey (路由key)
  • 消息的发送方在向Exchange发送消息时,也必须指定消息的 RoutingKeyExchange
  • 不再把消息交给每一个绑定的队列,而是根据消息的 Routing Key 进行判断,只有队列的Routingkey 与消息的 Routing key 完全一致,才会接收到消息

 

路由模式要求队列在绑定交换机时要指定 routing key,消息会转发到符合 routing key 的队列。

4、Topics 通配符模式

类型交换机的类型要改成topics  

Topic 主题模式可以实现 Pub/Sub 发布与订阅模式和 Routing 路由模式的功能,只是Topic 在配置routing key的时候可以使用通配符,显得更加灵活

四、SpringBoot整合RabbitMQ

1、生产者

  1. 创建生产者SpringBoot工程
  2. 引入依赖坐标
  3. 编写yml配置,基本信息配置
  4. 定义交换机,队列以及绑定关系的配置类
  5. 注入RabbitTemplate,调用方法,完成消息发送

写config配置类

发送消息,templates上要加@AutoWire注解

2、消费者

  1. 创建消费者SpringBoot工程
  2. 引入start,依赖坐标
  3. 编写yml配置,基本信息配置
  4. 定义监听类,使用@RabbitListener注解完成队列监听

其他都和生产者一样的,就是做一个监听类,然后监听队列里的消息

3、小结

  • SpringBoot提供了快速整合RabbitMQ的方式
  • 基本信息再xml中配置,队列交互机以及绑定关系在配置类中使用Bean的方式配置
  • 生产端直接注入RabbitTemplate完成消息发送
  • 消费端直接使用@RabbitListener完成消息接收

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP32设备驱动-BME680环境传感器驱动

BME680环境传感器驱动 文章目录 BME680环境传感器驱动1、BME680介绍2、硬件准备3、软件准备4、驱动实现1、BME680介绍 BME680 是一款集成环境传感器,专为尺寸和低功耗是关键要求的移动应用和可穿戴设备而开发。 BME680 扩展了 Bosch Sensortec 现有的环境传感器系列,首次集成…

电影《龙马精神》观后感

上周看了龙叔的电影《龙马精神》,整体故事围绕着一匹马而展开的,因为这匹马,饰演罗师傅的龙叔,被小混混催债,因为这匹马,罗师傅才有机会和女儿接触,因为这匹马,才有机会看见女婿。 看…

数据结构-排序

本节目标: 1.排序的概念及其运用 2.常见排序算法的实现 3.排序算法复杂度及稳定性分析 1.排序的概念及其应用 1.1排序的概念 排序就是按照某个我们设定的关键字,或者关键词,递增或者递减,完成这样的操作就是排序。 1.2排…

打开组策略提示:无法为文件xxx找到适当的资源文件,错误=2的解决方法

最近把自己的电脑升级成win11了,出现了一些bug,不见得是win11系统的问题,也可能是某个过程出现了问题,出现了问题咱就解决,参考了几个文档和视频,最终解决了,记录一下。 打开本地策略出现问题如…

7.Java中的String类、常用类及包装类

Java中的String类、常用类及包装类 一、String类 1、String类定义 String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为…

2023爱分析·中国城市轨交智能运维市场厂商评估报告:逸迅科技

报告编委 张扬 爱分析联合创始人&首席分析师 王鹏 爱分析分析师 目录 1. 研究背景 2. 市场综述 3. 市场分析 4. 厂商评估:逸迅科技 5. 最佳实践案例 1. 研究背景 轨道交通是我国国民经济的命脉和交通运输的骨干网络,不仅承担了绝大…

RocketMQ 消息发送源码解读

可靠同步发送、可靠异步发送、单向发送、批量消息发送。 RocketMQ 消息发送需要考虑以下3个问题。 1)消息队列如何进行负载? 2)消息发送如何实现高可用? 3)批量消息发送如何实现一致性? org.apache.rocketm…

基于SpringBoot+微信小程序的失物招领小程序

基于SpringBoot微信小程序的失物招领小程序 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目…

通达信欧奈尔RPS指标公式编写和设置方法(完全版)

通达信欧奈尔RPS指标公式的编写和设置较为复杂,对于初学者来说可能具有一定挑战性。在编写口袋支点公式时,需要使用RPS指标公式作为基础条件,因此有必要先了解其编写和设置方法。 一、上市一年以上选股 首先选出上市一年以上的股票&#xff…

python实现折线图和条形图

画图的部分函数 pandas 读取数据 相关包:import pandas as pd 函数:dfpd.read_excel(“文件名”) #读取excel文件 df.head(n)#查看前n行 df.tail(n)#查看后n行 df.shape #查看行数和列数 df.columns # 查看列索引 df.index #查看行索引 df.info() #查看…

怎样恢复删除的视频?视频恢复,4个方法!

案例:怎样恢复删除的视频 【谁懂啊!电脑里视频太多了太占内存,本想删除一些不太重要的,但却删错了!有朋友知道怎样恢复删除的视频吗?】 在数字化时代,我们经常使用电脑来存储和管理各种视频文…

股票量比实时筛选报警

一.什么是股票的量比 量比是短线投资一个参考指标,是衡量相对成交量的一个数值和指标,用于反映股票交易相对于以往的活跃程度;是指在股市开盘以后,平均每一分钟的成交量与过去五个交易日平均每分钟交易量的比。反映股票相对最近5…

自动驾驶定位模块的作用是什么?为什么会有多种坐标系?

无人车,要实现自动驾驶,首先要知道自己的的位置。更准确的说法是:相对某个坐标系,确定车辆的位置和姿态。 这个坐标系可以是局部的: 也可以是全局坐标系: 这是更大维度上的坐标系。 坐标系确定之后,相对坐标原点和坐标轴,车上坐标系(本地坐标系),平移得到位置(x…

SQL语句要点一文速览

以下内容参考《SQL必知必会(第4版)》 了解 SQL 数据库(database):保存有组织的数据的容器(通常是一个文件或一组文件)。最简单的办法是将数据库想象为一个文件柜。这个文件柜是一个存放数据的…

【数据结构】算法的时间复杂度和空间复杂度(下)(附leetcode练习题)

☃️个人主页:fighting小泽 🌸作者简介:目前正在学习C语言和数据结构 🌼博客专栏:数据结构 🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪&…

【Linux】system V 共享内存

文章目录system V1. 共享内存原理第一阶段原理第二阶段原理2. 直接写代码--编写代码进行原理介绍shmget函数ftok函数key值用法1. 创建key值2. 创建共享内存 获取共享内存3. 将自己和共享内存关联起来4. 将自己和共享内存取消关联5. 删除共享内存用指令删除调用系统调用完整代码…

数据库管理-第六十六期 SQL Domain(20230413)

数据库管理 2023-04-13第六十六期 SQL Domain1 基本介绍2 Domain的表达式和条件3 语法4 语义5 示例总结第六十六期 SQL Domain 上一期一笔带过了部分Oracle 23c的新特性,这一期重点讲一下SQL Domain新特性。 【https://docs.oracle.com/en/database/oracle/oracle-…

【提升效率神器】Python简单批量生成PDF文档(详细做法)

文章目录前言一、准备二、基本使用三、批量生成PDF总结前言 日常办公中,经常会使用PDF文档,难免需要对PDF文档进行编辑,有时候PDF文档中的大部分内容都是一样的,只是发送对象不同。 这种模板套用的场景下,使用Python…

BI 知识大全,值得收藏的干货

01、什么是商业智能BI? 商业智能BI可以实现业务流程和业务数据的规范化、流程化、标准化,打通ERP、OA、CRM等不同业务信息系统,整合归纳企业数据,利用数据可视化满足企业不同人群对数据查询、分析和探索的需求,从而为…

OpenCV实例(三)答题卡识别

OpenCV实例(三)答题卡识别1.答题卡识别概述2.单道题目的识别2.1基本流程及原理2.2代码实例:作者:Xiou 1.答题卡识别概述 随着信息化的发展,计算机阅卷已经成为一种常规操作。在大型考试中,客观题基本不再…