PHP-面试总结——高并发篇

本文深入探讨了在PHP面试中关于高并发处理的要点,重点讲解了RabbitMQ的使用,包括其概念、为什么使用、应用场景、消息确认机制、避免重复消费的策略、消息传输原理、分发与路由方式,以及确保消息不丢失的方法。此外,还提到了RabbitMQ集群、优缺点、一致性问题和分布式事务处理。最后,针对直播大流量场景提出了相应的解决方案,如增加服务器、CDN缓存、Redis队列、数据库主从等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、什么是rabbitmq

采用AMQP高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦

2、为什么要使用rabbitmq

1. 在分布式系统下具备异步,削峰,负载均衡等一系列高级功能;

2. 拥有持久化的机制,进程消息,队列中的信息也可以保存下来。

3. 实现消费者和生产者之间的解耦。

4. 对于高并发场景下,利用消息队列可以使得同步访问变为串行访问达到一定量的限流,利于数据库的操作。

可以使用消息队列达到异步下单的效果,排队中,后台进行逻辑下单

3、使用rabbitmq的场景

1. 服务间异步通信

2. 顺序消费

3. 定时任务

4. 请求削峰

4、如何确保消息正确地发送至RabbitMQ? 如何确保消息接收方消费了消息?

发送方确认模式

将信道设置成confirm模式(发送方确认模式),则所有在信道上发布的消息都会被指派一个唯一的ID。

一旦消息被投递到目的队列后,或者消息被写入磁盘后(可持久化的消息),信道会发送一个确认给生产者(包含消息唯一ID)。

如果RabbitMQ发生内部错误从而导致消息丢失,会发送一条nack(not acknowledged,未确认)消息。

发送方确认模式是异步的,生产者应用程序在等待确认的同时,可以继续发送消息。当确认消息到达生产者应用程序,生产者应用程序的回调方法就会被触发来处理确认消息。

接收方确认机制

接收方消息确认机制

消费者接收每一条消息后都必须进行确认(消息接收和消息确认是两个不同操作)。只有消费者确认了消息,RabbitMQ才能安全地把消息从队列中删除。

这里并没有用到超时机制,RabbitMQ仅通过Consumer的连接中断来确认是否需要重新发送消息。也就是说,只要连接不中断,RabbitMQ给了Consumer足够长的时间来处理消息。保证数据的最终一致性;

下面罗列几

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值