精华内容
下载资源
问答
  • php-queue 是 PHP开发的磁盘存储消息队列服务,基于leveldb和swoole ,在4核机器上处理能力可以达到2.5W/s 。leveldb: ...
  • 主要介绍了PHP消息队列用法,结合实例形式分析了PHP消息队列用于Linux下进程间通信的相关技巧,需要的朋友可以参考下
  • php消息队列框架httpsqs

    2019-03-21 11:00:46
    HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key/Value 数据库来做数据的持久化存储。源代码不超过700行,整个软件不超过900KB...
  • Memcache 一般用于缓存服务。但是很多时候,比如一个消息广播系统,需要一个消息队列。直接从数据库取消息,负载往往不行。如果将整个消息队列用一个key缓存到memcache里面.
  • 流行消息队列服务

    千次阅读 2012-07-26 21:38:21
    一、简单消息队列服务 HTTPSQS HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key/Value 数据库来做数据的持久化存储。 队列...


    一、简单消息队列服务 HTTPSQS

    HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key/Value 数据库来做数据的持久化存储。

    队列(Queue)又称先进先出表(First In First Out),即先进入队列的元素,先从队列中取出。加入元素的一头叫“队头”,取出元素的一头叫“队尾”。利用消息队列可以很好地异步处理数据传送和存储, 当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采取消息队列来异步插入。另外,还可以将较慢的处理逻辑、有并发数量限制的处理逻辑,通过 消息队列放在后台处理,例如FLV视频转换、发送手机短信、发送电子邮件等。

    1、HTTPSQS 具有以下特征:

    ● 非常简单,基于 HTTP GET/POST 协议。PHP、Java、Perl、Shell、Python、Ruby等支持HTTP协议的编程语言均可调用。
    ● 非常快速,入队列、出队列速度超过10000次/秒。
    ● 高并发,支持上万的并发连接,C10K不成问题。
    ● 支持多队列。
    ● 单个队列支持的最大队列数量高达10亿条。
    ● 低内存消耗,海量数据存储,存储几十GB的数据只需不到100MB的物理内存缓冲区。
    ● 可以在不停止服务的情况下便捷地修改单个队列的最大队列数量。
    ● 可以实时查看队列状态(入队列位置、出队列位置、未读队列数量、最大队列数量)。
    ● 可以查看指定队列ID(队列点)的内容,包括未出、已出的队列内容。
    ● 查看队列内容时,支持多字符集编码。
    ● 源代码不超过700行,适合二次开发。

    简单消息队列服务 HTTPSQS


    以上来自百度百科。


    二、ActiveMQ

    ActiveMQ:是Apache出品,最流行的,能力强劲的开源消息总线。是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。

    JMS(Java消息服务):是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

    2. JMS消息模式

    1) 点对点或队列模式

    每个消息只能有一个消费者。消息的生产者和消费者之间没有时间上的相关性,无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。

    ActiveMQ学习笔记

    2) Pub/Sub 发布/订阅模式

    每个消息可以有多个消费者。生产者和消费者之间有时间上的相关性。订阅一个主题的消费者只能消费自它订阅之后发布的消息。

    3. Broker节点

    代表一个运行MQ的节点。

    4. Transport传输方式

    ActiveMQ目前支持的Transport有:VM Transport、TCP Transport、NIO Transport、SSL Transport、Peer Transport、UDP Transport、Multicast Transport、HTTP and HTTPS Transport、WebSockets Transport、Failover Transport、Fanout Transport、Discovery Transport、ZeroConf Transport等。

    1) VM Transport:允许客户端和Broker直接在VM内部通信,采用的连接不是Socket连接,而是直接的方法调用,从而避免了网络传输的开销。应用场景也仅限于Broker和客户端在同一JVM环境下。

    2) TCP Transport:客户端通过TCP Socket连接到远程Broker。配置语法:

    tcp://hostname:port?transportOptions

    3) HTTP and HTTPS Transport:允许客户端使用REST或者Ajax的方式进行连接。这意味着可以直接使用Javascript向ActiveMQ发送消息。

    4) WebSockets Transport:允许客户端通过HTML5标准的WebSockets方式连接到Broker。

    5) Failover Transport:青龙系统MQ采用的就是这种连接方式。这种方式具备自动重新连接的机制,工作在其他Transport的上层,用于建立可靠的传输。允许配置任意多个的URI,该机制将会自动选择其中的一个URI来尝试连接。配置语法:

    failover:(tcp://localhost:61616,tcp://localhost:61617,.....)?transportOptions

    6) Fanout Transport:主要适用于生产消息发向多个代理。如果多个代理出现环路,可能造成消费者接收重复的消息。所以,使用该协议时,最好将消息发送给多个不相连接的代理。

    5. Persistence持久化存储

    1) AMQ Message Store

    ActiveMQ 5.0 的缺省持久化存储方式。

    2) Kaha Persistence

    这是一个专门针对消息持久化的解决方案。它对典型的消息使用模式进行了优化。

    3) JDBC Persistence

    目前支持的数据库有:Apache Derby, Axion, DB2, HSQL, Informix, MaxDB, MySQL, Oracle, Postgresql, SQLServer, Sybase。

    4) Disable Persistence

    不应用持久化存储。

    6. 集群方案

    1. Master / Slave

    1.1. Pure Master Slave

    无单点故障;

    不需要依赖共享文件系统或是共享数据库,使用 KahaDB的方式持久化存储;

    一个Master只能带一个Slave;

    Master工作期间,会将消息状况自动同步到Slave;

    Master一旦崩溃,Slave自动接替其工作,已发送并尚未消费的消息继续有效;

    Slave接手后,必须停止Slave才能重启先前的Master;

    1.2. Shared File System Master Slave

    1.3. JDBC Master Slave

    配置上,不存在Master和Slave的区分,多个共享数据源的Broker构成JDBC Master Slave;

    首先抢到资源(数据库锁)的Broker成为Master,其他Broker定期尝试抢占资源;

    一旦Master崩溃,其他Broker抢占资源,最终只有一台抢到,立刻成为Master,之前的Master即便重启成功,也只能作为Slave等待;

    7. 延伸链接

    1. ActiveMQ http://activemq.apache.org/

    2. Metamorphosis (MetaQ) http://metaq.taobao.org/

    淘宝开源分布式消息中间件,在淘宝和支付宝有着广泛应用。

    3. DotNetMQ

    基于C#和.NET框架的开源消息队列系统。

    4. JBoss Messaging http://www.jboss.org/jbossmessaging/


    展开全文
  • 这个时候,我们可以引入一个叫『消息队列』的概念来解决上面的需求。 消息队列的概念、原理和场景 在高并发的时候,程序往往无法做到及时的处理。我们引入一个中间的系统,来进行分流和减压。  所以从本质上讲:...

     

    在互联网项目开发者经常会遇到『给用户群发短信』、『订单系统有大量的日志需要记录』或者在秒杀业务的时候服务器无法承受瞬间并发的压力。 
    这种情况下,我们怎么保证系统正常有效的运行呢?

    这个时候,我们可以引入一个叫『消息队列』的概念来解决上面的需求。

    消息队列的概念、原理和场景

    在高并发的时候,程序往往无法做到及时的处理。我们引入一个中间的系统,来进行分流和减压。 
    所以从本质上讲:消息队列就是一个队列结构的中间件。也就是说,你把消息和内容放入这个容器之后就可以直接返回,不用等它后期处理的结果。另外会有一个程序,读取这些数据并按照顺序处理。

    1、队列结构的中间件
    2、消息放入后,不必立即处理
    3、由订阅者/消费者按顺序处理

    也就是说:当遇到一个比较大或者耗时比较长的环节的时候,而同时你的业务又不需要立即知道这个环节的结果,使用消息队列是好的选择。

    核心结构如下面: 
    这里写图片描述

    消息队列 适用场景

    一、数据需要冗余的时候 
    比如订单系统中,后续需要进行数据的转换和记录。消息队列可以把这些数据持久化的存储在队列中,然后由订单后期处理程序进行处理,处理完成之后再把这条记录从队列中删除。

    二、系统的解耦 
    消息队列解决了2套系统之间深度耦合的问题。 
    使用消息队列后,入队的系统和出队的系统没有直接的关系。 
    入队系统和出队系统,其中一个崩溃之后不会影响另外一个的正常运行。

    三、流量削峰 
    就是秒杀和抢购的时候,会出现明显的流量剧增,对服务器的压力非常大。 
    实际项目开发中,配合缓存来使用消息队列,一种很好的方案。

    四、异步通信 
    消息队列本身就实现了程序的异步操作,因此只要适合于异步的场景都可以使用消息队列

    五、扩展性 
    比如订单系统,订单入队之后,后期或许还有财务系统处理,但是如果还要加一个配货系统。 
    只需要让这个配货系统 订阅这个 消息队列 即可。

    六、排序保证 
    在有些场景下,数据的处理顺序是非常重要的,队列本身就可以做成单线程的单进单出的系统。 
    从而有效的保证数据按照顺序进行处理。

    队列的最主要用途是异步任务和通信两个方面。

    异步的思路主要用来缓解瞬间压力、耗时操作、并行任务等。
    1. 缓解瞬间压力:若系统每秒处理能力是100请求,而最高峰值可能达到每秒1000请求,若不采用队列,很有可能会出现服务不可用或者长时间等待。此时可以用队列将未能成功执行的请求放入队列,顺序执行,直到所有请求都被处理。
    2. 耗时操作:如@loki 提到的缩略图生成。
    3. 并行任务:如在发贴后分发通知所有的好友。

    通信的思路主要用来解决在不同的独立模块或者系统之间相互同步数据、通知执行某些操作等。

    常见 队列实现 的优缺点

    队列介质:

    Mysql:可靠性高、易实现、速度慢
    Redis:速度快,单条大消息包时效率低
    消息系统:专业性强、可靠,学习成本高(比如:RabbtiMQ)

    消息处理的触发机制:

    死循环方式读取:易实现,故障时无法及时恢复;
    定时任务:压力均分,有处理量上限。(最大的缺陷:定位任务时间的间隔和处理的数据需要精准把握,不能上一个任务还没有处理完成,下一个认为就已经启动了)
    
    守护进程:类似于PHP-FPM和PHP-CGI,需要shell知识
    展开全文
  • 主要介绍了PHP消息队列实现及应用,结合实例形式详细分析了php消息队列的概念、原理及队列处理订单系统和配送系统案例,需要的朋友可以参考下
  • PHP消息队列Beanstalkd类下载。Beanstalkd,一个高性能、轻量级的分布式内存队列系统,最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟,支持过有9.5 million用户的Facebook ...
  • 本文实例讲述了php+redis实现消息队列功能。分享给大家供大家参考,具体如下: 个人理解在项目中使用消息队列一般是有如下几个原因: 把瞬间服务器的请求处理换成异步处理,缓解服务器的压力 实现数据顺序排列获取 ...
  • 消息队列rabbitmq各种模式使用死信队列  延迟队列tp6实战消息队列 学会使用消息队列解决,应用解耦,高并发场景,异步消息队列
  • 主要介绍了使用PHP访问RabbitMQ消息队列的方法,结合实例形式分析了RabbitMQ消息队列的相关扩展安装、队列建立、队列绑定、消息发送、消息接收等相关操作技巧,需要的朋友可以参考下
  • PHP使用消息队列ActiveMQ

    千次阅读 2018-08-29 01:05:29
    消息队列中间件是分布式系统中的重要组件,主要解决应用耦合、异步消息、流量削锋等问题。可帮助实现高性能,高可用,可伸缩和最终一致性的架构。 消息队列应用场景 异步任务 假设场景:现在很多网站或App注册...

    消息队列中间件是分布式系统中的重要组件,主要解决应用耦合、异步消息、流量削锋等问题。可帮助实现高性能,高可用,可伸缩和最终一致性的架构。

    消息队列应用场景

    异步任务

    假设场景:现在很多网站或App注册时都采用了验证码的机制,因此,当服务器收到客户端发起获取验证码的请求,有以下处理方式

    1. 在当前线程中立即发送短信(会阻塞当前线程一小会儿)
    2. 新建立一个线程发送短信
    3. 交由其他的服务来处理这个任务(让消息队列处理)

    那么,哪种方式更好呢?

    第一种:实时性肯定更好,收到请求立即处理,但它阻塞了当前线程,会造成其他客户端的请求被阻塞(请求少的时候我们可能根本感觉不到);
    第二种:在当前进程中建立一个线程来处理,实时性不如第一种,但它不会阻塞其他客户端的请求。不过一个进程中能创建的线程数量有限,因此也有瓶颈;
    第三种:使用其他特定场景的服务,这种实时性最差(但如果服务器配置好,我们也不一定能感觉到差异),但其是使用的最多的,并且其上线后效果是最好的(稳定性、可伸缩性)

    因此,如果是正式上线的版本(比如项目初期用于验证市场的版本,往往会为了速度而不考虑架构,这时可能会选择第一种或第二种方案),且峰值较高的服务,选用第三种方案无疑是最好的。因为对于上线的服务,稳定性是非常重要的。对于发送短信这样的任务(对实时性要求不是那么高),使用消息队列是非常合适的。将任务交由消息队列之后,发送短信具体要做的事情主服务就不需要干涉了。

    消息服务

    现如今的微服务、分布式集群等,各个节点之间的通信,就可以使用消息队列来处理。具体使用什么方式,可更具场景从以下两种选择

    • P2P(Point to Point)点对点模式
    • Publish/Subscribe(Pub/Sub) 发布订阅模式

    ActiveMQ

    ActiveMQ 是Apache出品,流行的能力强劲的开源消息总线。

    P2P模式案例

    P2P模式包含三个角色:消息队列(Queue),发送者(Sender),接收者(Receiver)。

    P2P的特点:

    • 每条消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。
    • 每条消息只有一个消费者,即一旦被消费,消息就会被移除消息队列,在运行了多个消费者之后,一条消息只会有一个消费者收到,其他的消费者是不可以收到的;
    • 接收者在成功接收消息之后需向队列应答成功:可以通过指定应答模式来更改,默认是自动应答模式

    生产者向ActiveMQ发送消息(queue)

    启动生产者 /opt/php/bin/php /mnt/d/server/www/activemq/consumer.php
    require __DIR__.'/vendor/autoload.php'; //引入自动加载的文件
    try {
        $stomp = new \FuseSource\Stomp\Stomp('tcp://127.0.0.1:61613');
        $stomp->connect();
    
        $data['username'] = 'root';
        $data['password'] = '123456';
        $result = $stomp->send('/queue/userReg', json_encode($data));
        var_dump($result);
    
    } catch(StompException $e) {
        die('Connection failed: ' . $e->getMessage());
    }

    消费者订阅/监听队列消息

    启动消费者 /opt/php/bin/php /mnt/d/server/www/activemq/consumer.php
    require __DIR__.'/vendor/autoload.php'; //引入自动加载的文件
    
    try {
        $stomp = new \FuseSource\Stomp\Stomp('tcp://127.0.0.1:61613');
        $stomp->connect();
        $stomp->subscribe('/queue/userReg');
    
        while (true) {
            if ($stomp->hasFrameToRead()) {
                $frame = $stomp->readFrame();
                $data = json_decode($frame->body, true);
                var_dump($frame);
                $stomp->ack($frame);
            }
        }
    
    } catch(StompException $e) {
        die('Connection failed: ' . $e->getMessage());
    }

    运行结果,每条消息只有一个消费者;如果没有启动消费者监听,队列保留着消息直到被消费;
    这里写图片描述

    Pub/Sub模式

    Pub/Sub模式:包含三个角色主题(Topic),发布者(Publisher),订阅者(Subscriber)。多个发布者将消息发送到Topic, 系统将这些消息传递给多个订阅者,可以认为生产者与消费者之间是多对多的关系

    Pub/Sub的特点

    • 每条消息可以有多个消费者
    • 为了消费消息,订阅者必须保持运行的状态
    • 为了缓和这样严格的时间相关性,JMS 允许订阅者创建一个可持久化的订阅。这样即使订阅者没有运行,在运行之后它也能接收到发布者的消息。

    在 PHP中,它与 P2P 的使用区别不大,将queue改成topic即可

    $result = $stomp->send('/topic/userReg', json_encode($data));

    运行结果,每个订阅了topic的消费者都能收到消息,一般情况下需要有消费者正在运行,生产者产生的topic才会被接收,否则丢失。

    这里写图片描述

    展开全文
  • php消息队列的应用

    千次阅读 2016-09-03 16:26:49
    最近打算开发一个新功能,计划应用消息队列。 以前对消息队列都是简单的理论了解,真正应用之后把自己的感觉和一些理解整理下来。 =================说正事分割线================...

    欢迎加入,新群号码:99640845

    最近打算开发一个新功能,计划应用消息队列。

    以前对消息队列都是简单的理论了解,真正应用之后把自己的感觉和一些理解整理下来。

    =================说正事分割线====================

    具体的业务场景如下:

    用户下单-》生成订单-》支付-》返回支付信息

    就是正常的订单逻辑,现在需要在中间做一个功能类似于,统计每张订单的来源,而这个来源就是整个平台的用户。相当于一个推广的策略。

    也就是变成了:

    用户下单-》判断来源-》生成订单-》支付-》维护来源统计表-》返回支付信息

    还要根据来源统计表做一个日,周,月,总 的排行榜这样看来在 维护来源统计表 的时候要维护的数据量还是蛮大的

    这样就会把之前的简单的业务逻辑变的复杂 所以才用了-》消息队列,将整个维

    展开全文
  • 主要介绍了PHP+MySQL实现消息队列的方法,结合实例形式分析了php+mysql构建消息队列并使用定时器间歇发送信息相关操作技巧,需要的朋友可以参考下
  • 主要介绍了PHP使用ActiveMQ实现消息队列的方法,结合实例形式详细分析了PHP使用ActiveMQ实现消息队列具体步骤、相关操作技巧与注意事项,需要的朋友可以参考下
  • *Php消息队列实现

    万次阅读 2018-02-27 11:46:04
    2、消息放入后不需要立即处理 3、由订阅者/消费者按顺序处理 队列原理: 也是解耦的原理:业务系统和队列处理系统没有关系 一个写(业务系统),一个读(队列管理系统)。 写的只管往队列里写,别的不用操心...
  • 本文实例为大家分享了php+redis消息队列实现抢购的具体代码,供大家参考,具体内容如下 实现功能: 1. 基于redis队列,防止高并发的超卖 2. 基于mysql的事务加排它锁,防止高并发的超卖 基于redis队列工作流程:...
  • php实现消息队列的用处比如在做发送邮件时发送大量邮件很费时间的问题,那么可以采取队列。方便实现队列的轻量级队列服务器是:starling支持memcache协议的轻量级持久化服务器...
  • 主要为大家分享了php-beanstalkd消息队列类实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 消息队列发送数据和获取数据的测试 <?php $key=ftok(__FILE__,'a'); //获取消息队列 $queue=msg_get_queue($key,0666); //发送消息 //msg_send($queue, 1, Hello, 1); //接收消息,如果接收不到会阻塞 msg_...
  • 消息队列处理后台任务带来的问题 项目中经常会有后台运行任务的需求,比如发送邮件时,因为要连接邮件服务器,往往需要5-10秒甚至更长时间,如果能先给用户一个成功的提示信息,然后在后台慢慢处理发送邮件的操作,...
  • 主要介绍了PHP使用redis消息队列发布微博的方法,结合具体实例形式分析了php结合redis数据库操作消息队列实现微博发布的相关技巧与注意事项,需要的朋友可以参考下
  • 主要介绍了php基于Redis消息队列实现的消息推送的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 81,076
精华内容 32,430
关键字:

php消息队列服务