如何自己实现一个异步任务器
首先这里先暂时不给代码实现,后续有精力再补上。
1、使用 Redis 的队列数据类型,实现消息发送。
2、使用PHP启动一个常驻进程,接收并处理 Redis 的队列消息。
这个进程的实现很关键了,要考虑各种容错和中断,重启机制。
redis 的队列消息也要考虑各种未处理完成,消息丢失情况。
细节:
常驻进程可以配合Linux中的进程管理器,实现自动重启。
执行任务,需要加并发锁(悲观锁或自旋锁)。大家不要觉得这是单进程单线程的执行,不用加锁。你得知道你的触发是不确定的。
Redis 队列中,取出一个数据后,要注意,这个数据就不在原先的队列中了,我们此时可以做好备份机制,防止处理过程中意外情况,导致这条消息没有处理完成,数据丢失。
最后:有条件可以选择更专业的消息队列服务软件。(排名没有先后)
Kafka
ActiveMQ
RocketMQ
RabbitMQ
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: