/RabbitMQ-tutorial

这是为了解决php没有连接池的问题,单机1W并发下,QPS稳定在7000+

Primary LanguagePHP

RabbitMQ-PHP

这是给PHP的RabbitMQ使用者的一点启发

基本概念

  • 为什么产生此项目? 先看一点简单的介绍: 消息中间件是在消息的传输过程中保存消息的容器.消息中间件再将消息从它的源中中继到它的目标时充当中间人的作用.队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功传递它为止. 介于此,我们使用消息队列来解耦一些业务。 但是目前类似Mysql,Redis,MongDB的解决方案,在nginx+fpm场景下,很难适用于高并发的业务。

  • 原因:

    以我们熟悉的PHP运行为例,一次web请求到达,然后框架(or脚本)启动,然后到返回web请求,php生命周期结束(我觉得主要是为了回收方便)。所以我们底层的连接并不能复用。虽然php-amqp提供了pconnect的方法,但是AMQP协议中并不单是有连接,还有channel,exchange,在我的测试中发现,即使使用长连接,channel每次请求依旧会被创建,这个效率是不能忍的。。所以,连接池就这样被搞出来了。本项目就是一个连接池。

  • 什么是AMQP?

    AMQP(高级消息队列协议)是一个异步消息传递所使用的应用层协议规范,作为线路层协议,而不是API(如JMS),AMQP客户端能够无视消息的来源任意发送和接受信息.AMQP的历史中表明它的原始用途之三为了金融界提供一个可以彼此协作的消息协议,而现在的目标则是为通用消息队列架构提供通用的构建工具.并且AMQP统一林消息模式,例如发布/订阅,队列,事务以及流数据,并且添加了额外的特性,如topic(基于内容的路由).

  • 项目还未上线,持续维护更新中