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分钟去处理这个业务,然后就可以实现业务的实现,使用延时消息就可以解决

死信交换机

只要满足其中之一个条件

延时消息插件

  • 对交换机进行改造,就会存储时间
  • 安装插件
  • 然后去使用
相关推荐
only-lucky1 小时前
C语言socket编程-补充
服务器·c语言·php
笑衬人心。2 小时前
Ubuntu 22.04 修改默认 Python 版本为 Python3 笔记
笔记·python·ubuntu
蓝黑20202 小时前
PHP从字符串到数值的类型转换
php
一个临漂的实习生2 小时前
php协程
php·swoole
金色光环2 小时前
【Modbus学习笔记】stm32实现Modbus
笔记·stm32·学习
zyxzyx6663 小时前
Flyway 介绍以及与 Spring Boot 集成指南
spring boot·笔记
西岭千秋雪_4 小时前
Redis性能优化
数据库·redis·笔记·学习·缓存·性能优化
HuashuiMu花水木5 小时前
Matplotlib笔记4----------图像处理
图像处理·笔记·matplotlib
DES 仿真实践家6 小时前
【Day 11-N22】Python类(3)——Python的继承性、多继承、方法重写
开发语言·笔记·python
IMPYLH12 小时前
Python 的内置函数 reversed
笔记·python