PHP之RabbitMQ笔记

RabbbitMQ

安装

·

docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management

docker run -d --hostname my-rabbit --name rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=qwer1234 -p 15672:15672 -p 5672:5672 rabbitmq:management

docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_management

·

基本介绍

  • publlisher:消息发送者
  • consumer:消息的消费者
  • queue:队列,存储消息
  • exchange:交换机,负责路由消息,和转发,没有存储功能
  • virtual-host:虚拟主机

数据隔离

  • 虚拟主机
  • 自己创建虚拟主机,自己去创建虚拟主机 就是被隔离开来,自己就是存在自己的虚拟主机了

配置能者多劳 work模型

  • prefetch:1 配置能者多劳,每次取出一条消息,处理完成才能获取下一个消息
  • 如何处理消息堆积问题:绑定多个消费者,加快消息处理的速度,优化自己的业务代码,缓存,异步等等。
  • 可以在一个队列上绑定多个消费者
  • 怎么处理消息堆积?使用多个消费者,优化代码

Fanout交换机

  • Fanout:广播

  • Direct:定向

  • Topic:话题

  • Fanout交换机会将接收到的数据广播到每一个queue,所以可以叫广播模式

  • 取名创建队列:fanout.queue1

Direct交换机

  • 会根据一定的规则路由到指定的Queue
  • 队列绑定BindingKye
  • 发布者指定消息的RoutingKey

Topic交换机

  • 和direct交换机很像,不过可以匹配多个的

队列和交换机的声明

  • 可以使用代码去创建queue交换机

消息转换器

  • 发送一个对象类型的

高级篇

可靠性问题

发送者可靠性

  • 生产者重连
  • 生产者确认

  • correlated:就是需要编写回调函数

MQ端消息丢失

  • 数据持久化
  • 交换机持久化 durable
  • LazyQuene:接收到消息直接写入磁盘,所有的版本都是lazyQuene
  • pageout 直接写入磁盘

消费者端数据安全

  • 消费者确认机制
  • 消费者主动去告诉mq 消息处理成功

消息的失败处理策略

  • 当数据出现问题,不告诉mq 而是在本地无限的去重试,记录当前的业务的状态
  • 重试多次依旧失败 处理-直接拒绝,重新入队,重新发送消息(消息处理失败,发送到指定的交换机)

业务的幂等性

  • 一个消息会被处理多次 消费者重复消费,业务要做到幂等性
  • 如何保证业务的幂等性---使用令牌的方式来执行表单的提交,就能判断表单是否重复提交,给消息加上一个消息的唯一id
  • 解决方案:判断id
  • 基于业务逻辑的判断,修改状态,直接在业务上把数据处理,where id = 1
  • 删除操作不存在幂等性

延迟消息

  • 生产者发送会指定一个时间,指定时间之后消费者就是回去处理
  • 支付超时时间,(可以使用定时任务去处理,当然现在也是可以使用rabbitmq,延迟消息)
  • 下单后不付款,然后让这个30分钟去处理这个业务,然后就可以实现业务的实现,使用延时消息就可以解决

死信交换机

只要满足其中之一个条件

延时消息插件

  • 对交换机进行改造,就会存储时间
  • 安装插件
  • 然后去使用
相关推荐
better_liang1 小时前
每日Java面试场景题知识点之-消息队列MQ核心场景与实战
java·面试·kafka·消息队列·rabbitmq·rocketmq·mq
xingyuzhisuan1 小时前
网络 Token 常见故障原理,基础排查科普
运维·服务器·网络·php
z落落2 小时前
C#String字符串
开发语言·c#·php
智者知已应修善业4 小时前
【51单片机8位数码管动态显示日期小数点风格】2023-11-13
c++·经验分享·笔记·算法·51单片机
智者知已应修善业4 小时前
【51单片机有三个LED 分别第一个灯闪三下 再到第二个灯又闪三下 再到第三个灯又闪三下 就这样循环程序】2023-11-16
c++·经验分享·笔记·算法·51单片机
暴躁小师兄数据学院4 小时前
【AI大数据工程师特训笔记】第04讲:PostgreSQL 数据库内置函数详解
大数据·数据库·笔记·ai·语言模型
z落落7 小时前
C# 数组 最终完整版全套笔记(一维+多维+交错+引用类型+对象数组)
java·笔记·c#
searchforAI7 小时前
B站视频转笔记用哪个工具?2026年四款AI笔记工具对比实测
人工智能·经验分享·笔记·gpt·学习·视频总结·ai笔记
RainCity8 小时前
Java Swing 自定义组件库分享(九)
java·笔记·后端
05候补工程师8 小时前
【408考研·数据结构专题】二叉树、树与森林、线索树及哈夫曼树核心考点与秒杀技巧深度总结
数据结构·经验分享·笔记·考研·算法