RabbitMQ

一文了解RabbitMQ(技术栈基础+延迟队列应用)

image-20231114194753241

image-20231114195000069

同步调用

业务顺次执行

image-20231114195647962

image-20231114195721186

异步调用

异步调用方式基于消息通知方式,一般包含三个角色:

消息发送者:发送消息的人,就是原来的调用方

消息代理:管理、暂存、转发消息,例如微信服务器

消息接收者:接收和处理消息的人,原来服务的提供方

image-20231114200140884

image-20231114200644415

MQ技术选型

image-20231114201221642

概述

publisher:消息的发送者

consumer:消息的消费者

queue:队列、储存消息

exchange:交换机、负责路由消息

image-20231116191718440

快速入门

image-20231116191809285

交换机负责路由和转发消息,没有存储消息的能力

使用交换机之前要先绑定队列才能实现消息的发送

队列中可以储存消息

image-20231116192304219

image-20231116192538911

数据隔离

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用户(user)和虚拟主机(virtual host)

连接java客户端

快速入门

SpringAMQP

基于AMQP协议(用于在应用程序之间传递业务消息的开放标准,与语言和平台无关)定义的一套API规范,提供了模板来发送和接收消息。spring-amqp是基础抽象,spring-rabbit是底层默认实现

image-20231116194521256

image-20231116194603409

image-20231116194801911

image-20231116194829153

image-20231116195325282

workqueue模型

多个消费者绑定一个发送者,共同消费队列中的消息

image-20231116195503145

image-20231116195521861

image-20231116200443289

image-20231116200942210

fanout交换机

image-20231116201205079

Fanout Exchange可以将接收到的消息广播到每一个与其绑定的queue,称为广播模式

image-20231116202015365

image-20231116202046082

Direct交换机

定向交换机,会将接收到的消息根据规则发送到指定的queue

image-20231119150529024

image-20231119150921349

Topic交换机(推荐)

routingkey可以是多个单词的列表,并且以.分割

queue与exchange绑定时可以使用通配符

image-20231119151324168

image-20231119151545000

声明队列与交换机

image-20231119152631772

基于bean绑定

image-20231119152740581

基于注解绑定

直接在Listener上绑定

image-20231119154423335

消息转换器

image-20231119155213574

image-20231119204146596

采用json序列化代替jdk序列化,自定义消息转换器

image-20231119204552839

消息可靠性

发送者可靠性

生产者重连

image-20231119210238845

生产者确认

image-20231119211846614

image-20231120103619516

image-20231120103734338

image-20231120104050874

image-20231120110129634

数据持久化

交换机持久化——durable

image-20231120152609348

队列持久化——durable

image-20231120152647915

消息持久化——delivery_mode = 2

image-20231120152707947

非持久化方式——使用内存保存消息

image-20231120153819091

image-20231120153844426

持久化——使用磁盘存储消息

image-20231120154007498

Lazy Queue

image-20231120154342849

image-20231120154403533

image-20231120155232455

image-20231120155321467

消费者可靠性

消费者确认

image-20231120155727937

image-20231120160331049

失败重试机制

image-20231120184355120

image-20231120185203102

注意:使用时配置文件中要有相应的参数

image-20231120190153841

image-20231120190317981

即在configuration中定义MessegeRecover的bean,接收异常信息

image-20231120190909725

业务幂等性——防止重复消息

image-20231120191758916

唯一消息id实现幂等性

为实现消息的幂等性,需要为消息设置一个唯一的id,以区分是否为重复消息

可以在消息转换器中添加id

image-20231120192026565

业务本身实现幂等性

image-20231120192744979

小结

image-20231120193217340

延迟消息

image-20231120194042830

死信交换机实现延迟消息

image-20231120194805921

延迟消息插件实现延迟消息(推荐)

首先需要开启rabbitmq的延迟消息插件

使用延迟消息插件声明延迟交换机

image-20231120200055148

设置消息的延迟时间

image-20231120200136752

使用延迟消息取消超时订单

image-20231120200723865

image-20231120201401457

image-20231120201948191

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值