RabbitMQ 基础篇 | 黑马

news/2024/11/24 13:23:42/

目录

一、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.ppmy.cn/news/43277.html

相关文章

如何设计一个安全的对外接口?

对外接口安全措施的作用主要体现在两个方面,一方面是如何保证数据在传输过程中的安全性,另一方面是数据已经到达服务器端,服务器端如何识别数据。 1. 数据加密 数据在传输过程中是很容易被抓包的,如果直接传输,数据可…

HTML:彩虹按钮

彩虹按钮&#xff08;盗版按钮&#xff0c;B站仿写&#xff0c;略有不同&#xff01;&#xff09; 链接 <html><head><title>demo</title><style>*{margin: 0;padding: 0;}body{display: flex;justify-content: center;align-items: center;…

电脑上删除的文件可以恢复吗 如何恢复电脑上删除的文件

电脑早已走进千家万户&#xff0c;成为我们不可或缺的家庭设备&#xff0c;我们用电脑来学习、工作&#xff0c;处理各种数据。在使用电脑处理数据时&#xff0c;可能会失误操作&#xff0c;删除重要文件。那么&#xff0c;电脑上删除的文件可以恢复吗&#xff0c;如何恢复电脑…

Optional类快速上手

目录 一、概述 二、使用 1、创建对象 2、安全消费值 3、安全获取值 4、过滤 5、判断 6、数据转换 一、概述 我们在编码的时出现最多的就是空指针异常&#xff0c;所以在很多情况下我们需要做各种非空的判断。 尤其是对象中的属性还是一个对象的情况下&#xff0c;这种…

android ndk 编译 libevent

android ndk 编译 libevent Russinovichs Blog 2022-10-19 原文 https://www.shuzhiduo.com/A/rV57oAKG5P/ 下载 libevent 2.1.8 版本 https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz 先在 win10 上用 wsl ubun…

【计算机网络-传输层】TCP 协议

文章目录1 传输层概述1.1 传输层的功能1.2 端口号2 TCP 报文段2.1 TCP 报文段首部格式2.2 TCP 数据传送的过程3 TCP 连接管理3.1 TCP 连接的建立——三次握手3.1.1 客户机向服务器发送 TCP 连接请求报文段3.1.2 服务器向客户机发送 TCP 连接请求确认报文段3.1.3 客户机向服务器…

数据结构和算法学习记录——初识二叉树(定义、五种基本形态、几种特殊的二叉树、二叉树的重要性质、初识基本操作函数)

目录 二叉树的定义 二叉树具体的五种基本形态 1.空树 2.只有一个节点 3.有左子树&#xff0c;但右子树为空 4.有右子树&#xff0c;但左子树为空 5.左右两子树都不为空 特殊二叉树 斜二叉树 满二叉树 完全二叉树 二叉树的几个重要性质 初识二叉树的几个操作函数 …

软件测试工作主要做什么

随着信息技术的发展和普及&#xff0c;人们对软件的使用越来越普及。但是在软件的使用过程中&#xff0c;软件的效果却不尽如人意。为了确保软件的质量&#xff0c;整个软件业界已经逐渐意识到测试的重要性&#xff0c;也有越来越多的小伙伴加入了软件测试这个行业中来。软件测…