RabbitMQ--SpringAMQP

一、MQ

1、同步通讯和异步通讯

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、MQ

MQ (MessageQueue),中文是消息队列,字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。

在这里插入图片描述

二、RabbitMQ

1、安装

在这里插入图片描述
在这里插入图片描述

2、概念

RabbitMQ中的几个概念
1.channel:操作MQ的工具
2.exchange:路由消息到队列中
3.queue:缓存消息
4.virtualhost: 虚拟主机,是对queue、exchange等资源的逻辑分组
在这里插入图片描述

3、消息模型

在这里插入图片描述

4、RabbitMQ简单队列模型

官方的Helloworld是基于最基础的消息队列模型来实现的,只包括三个角色
1、publisher: 消息发布者,将消息发送到队列queue
2、queue:消息队列,负责接受并缓存消息
3、consumer: 订阅队列,处理队列中的消息

在这里插入图片描述

基本消息队列的消息发送流程:
1.建立connection
2.创建channel
3.利用channel声明队列
4.利用channel向队列发送消息
基本消息队列的消息接收流程:
1.建立connection
2.创建channel
3.利用channel声明队列
4.定义consumer的消费行为handleDelivery()
5.利用channel将消费者与队列绑定

三、 SpringAMQP

在这里插入图片描述

1、Basic Queue 简单队列模型

springAMQP如何发送消息?
1、引入amqp的starter依赖
2、配置RabbitMQ地址
3、利用RabbitTemplate的convertAndSend方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

springAMQP如何接收消息?
1、引入amqp的starter依赖
2、配置RabbitMQ地址
3、定义类,添加@Component注解类中声明方法,添加@RabbitListener注解,方法参数接收消息
注意:消息一旦消费就会从队列删除,RabbitMQ没有消息回溯功能
在这里插入图片描述

2、Work Queue 工作队列

Work queue,工作队列,可以提高消息处理速度,避免队列消息堆积
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
work模型的使用:
1、多个消费者绑定到一个队列,同一条消息只会被一个消费者处理
2、通过设置prefetch来控制消费者预取的消息数量

3、发布订阅者模式

发布(Publish )、订阅 ( Subscribe )
发布订阅模式与之前案例的区别就是允许将同一消息发送给多个消费者。实现方式是加入了exchange(交换机)。
在这里插入图片描述

3.1、发布订阅-Fanout Exchange

Fanout Exchange 会将接收到的消息路由到每一个跟其绑定的queue

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

交换机的作用是什么?
1、接收publisher发送的消息
2、将消息按照规则路由到与之绑定的队列
3、不能缓存消息,路由失败,消息丢失
4、FanoutExchange的会将消息路由到每个绑定的队列
声明队列、交换机、绑定关系的Bean是什么?
Queue
FanoutExchange
Binding

3.2、发布阅-DirectExchange

Direct Exchange 会将接收到的消息根据规则路由到指定的Queue,因此称为路由模式 (routes)
1、每一个Queue都与Exchange设置一个BindingKey
2、发布者发送消息时,指定消息的RoutingKey
3、Exchange将消息路由到BindingKey与消息RoutingKey一致的队列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
描述下Direct交换机与Fanout交换机的差异?
Fanout交换机将消息路由给每一个与之绑定的队列
Direct交换机根据RoutingKey判断路由给哪个队列如果多个队列具有相同的RoutingKey,则与Fanout功能类似
基于@RabbitListener注解声明队列和交换机有哪些常见注解?
@Queue
@Exchange

3.3 、发布订阅-TopicExchange

TopicExchange与DirectExchange类似,区别在于routingKey必须是多个单词的列表,并且以 . 分割。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、SpringAMQP-消息转换器

SpringAMQP中消息的序列化和反序列化是怎么实现的?
1、利用MessageConverter实现的,默认是JDK的序列化
2、注意发送方与接收方必须使用相同的MessageConverter
在这里插入图片描述
在这里插入图片描述
这个依赖可以
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值