文档
Welcome! 安装(Installation) 示例列表(List of examples) 依赖注入与服务定位器(Dependency Injection/Service Location) MVC 架构(The MVC Architecture) 使用控制器(Using Controllers) 使用模型(Working with Models) 模型元数据(Models Meta-Data) 事务管理(Model Transactions) Phalcon 查询语言(Phalcon Query Language (PHQL)) 缓存对象关系映射(Caching in the ORM) 对象文档映射 ODM (Object-Document Mapper) 使用视图(Using Views) 视图助手(View Helpers) 资源文件管理(Assets Management) Volt 模版引擎(Volt: Template Engine) MVC 应用(MVC Applications) 路由(Routing) 调度控制器(Dispatching Controllers) 微应用(Micro Applications) 使用命名空间(Working with Namespaces) 事件管理器(Events Manager) 请求环境 (Request Environment) 返回响应(Returning Responses) Cookie 管理(Cookies Management) 生成 URL 和 路径(Generating URLs and Paths) 闪存消息(Flashing Messages) 使用 Session 存储数据(Storing data in Session) 过滤与清理(Filtering and Sanitizing) 上下文编码(Contextual Escaping) 验证(Validation) 表单(Forms) 读取配置(Reading Configurations) 分页(Pagination) 使用缓存提高性能(Improving Performance with Cache) 安全(Security) 加密/解密( Encryption/Decryption ) 访问控制列表 ACL(Access Control Lists ACL) 多语言支持(Multi-lingual Support) 通用类加载器 ( Universal Class Loader ) 日志记录(Logging) 注释解析器(Annotations Parser) 命令行应用(Command Line Applications) 队列(Queueing) 数据库抽象层(Database Abstraction Layer) 国际化(Internationalization) 数据库迁移(Database Migrations) 调试应用程序(Debugging Applications) Phalcon 开发工具(Phalcon Developer Tools) 提高性能:下一步该做什么?(Increasing Performance: What's next?) 单元测试(Unit testing) 授权(License)
教程

发布于 2015-08-21 15:30:14 | 481 次阅读 | 评论: 0 | 来源: 网络整理

队列(Queueing)

Perform activities like process a video, resize images or send emails aren’t suitable to be executed online or in real time because it may slow the loading time of pages, impacting the user experience.

The best solution here is implementing background jobs. A web application must put the job into a queue and wait that it will be processed.

While you can find more sophisticated PHP extensions to address queueing in your applications like RabbitMQ; Phalcon provides a client for Beanstalk, a job queueing backend inspired by Memcache. It’s simple, lightweight, and completely specialized on job queueing.

将任务加入队列(Putting Jobs into the Queue)

After connecting to Bens can insert as many jobs as required. The developer can define the message structure according to the needs of the application:

<?php

// Connect to the queue
$queue = new PhalconQueueBeanstalk(
    array(
        'host' => '192.168.0.21',
        'port' => '11300'
    )
);

// Insert the job in the queue
$queue->put(
    array('processVideo' => 4871)
);

Available connection options are:

Option Description Default
host IP where the beanstalk server is located 127.0.0.1
port Connection port 11300

In the above example we stored a message which will allow a background job to process a video. The message is stored in the queue immediately and does not have a certain time to life.

Additional options as time to run, priority and delay could be passed as second parameter:

<?php

// Insert the job in the queue with options
$queue->put(
    array('processVideo' => 4871),
    array('priority' => 250, 'delay' => 10, 'ttr' => 3600)
);

The following options are available:

Option Description
priority It’s an integer < 2**32. Jobs with smaller priority values will be scheduled before jobs with larger priorities. The most urgent priority is 0; the least urgent priority is 4,294,967,295.
delay It’s an integer number of seconds to wait before putting the job in the ready queue. The job will be in the “delayed” state during this time.
ttr Time to run – is an integer number of seconds to allow a worker to run this job. This time is counted from the moment a worker reserves this job.

Every job put into the queue returns a “job id” the developer can use to track the status of the job:

<?php

$jobId = $queue->put(
    array('processVideo' => 4871)
);

检索信息(Retrieving Messages)

Once a job is placed into the queue, those messages can be consumed by a background job which have enough time to complete the task:

<?php

while (($job = $queue->peekReady()) !== false) {

    $message = $job->getBody();

    var_dump($message);

    $job->delete();
}

Jobs must be removed from the queue to avoid double processing. If multiple background jobs workers are implemented, jobs must be “reserved” so other workers don’t re-process them while other workers have them reserved:

<?php

while (($job = $queue->reserve())) {

    $message = $job->getBody();

    var_dump($message);

    $job->delete();
}

Our client implement a basic set of the features provided by Beanstalkd but enough to allow you to build applications implementing queues.

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务