byjg / beansqueueworker
Beansqueue worker 消费来自 beanstalk 队列的负载
1.0.1
2017-09-03 14:17 UTC
Requires
- byjg/beansqueueclient: 1.0.*
- monolog/monolog: 1.22.*
- pda/pheanstalk: 3.1.*
- psr/log: 1.0.*
- symfony/process: 2.7.*
This package is auto-updated.
Last update: 2024-09-10 14:43:04 UTC
README
BeansqueueWorker 系统允许创建一个队列和一个将消费该队列的 Worker。
为此需要以下元素
- 队列(使用 Beanstalk 实现)
- 入队(由 BeansqueueWorker 实现)
- 消费(Worker,由 BeansqueueWorker 和 php-daemonize 实现)
工作原理
队列的基本工作原理如下
- 一个生产者
- 队列
- 消费者
BeansqueueWorker Worker 允许中介生产、访问队列和消费消息。因此,我们有以下元素
- 一个生产者 --> 使用 CURL 发布消息(见下文)
- 队列 --> Beanstalkd
- 消费者 --> 在 composer 中添加 BeansqueueWorker 依赖并创建一个继承自 "BaseWorker" 的项目
请在 DOCS 文件夹中查看一些教程。
安装 Beanstalkd(队列管理器)
队列使用 Beanstalk 实现。基本安装如下
sudo apt-get install beanstalkd
并在 /etc/default/beanstalkd 中进行配置
BEANSTALKD_LISTEN_ADDR=127.0.0.1
BEANSTALKD_LISTEN_PORT=11300
BEANSTALKD_EXTRA="-b /var/lib/beanstalkd"
将 BEANSTALKD_LISTEN_ADDR 更改为机器的 IP 地址
创建消费者(Worker)
入队需要您传递一个包含 Worker 名称和应作为参数传递的负载内容的 JSON。
将以下内容添加到您的项目中
composer require byjg/beansqueueworker
创建一个实现 \BeansqueueWorker\Worker\BaseWorker 的类
<?php
namespace Caminho\Da\Classe;
class MinhaClasse extends \BeansqueueWorker\Worker\BaseWorker
{
/**
* Toda a implementação do Job. O Payload está em DATA. Normalmente é um String.
*/
public function execute()
{
// Get Payload
$data = $this->getPayload();
// Execute
// ...
// Very important retry true
return true;
}
}
请注意,类的完整命名空间将用于入队。例如 `Caminho.Da.Classe.MinhaClasse`。
同样重要的是,您的类也应该包含在 composer 中,并且有 vendor/autoload。
在服务器上安装 WORKER 服务
需要 PHP-Daemonize。
要安装 PHP Daemonize,请按照以下步骤操作(作为 root 运行!- sudo su -
)
composer global require "byjg/php-daemonize=1.3.*"
sudo ln -s /home/ubuntu/.composer/vendor/bin/daemonize /usr/local/bin
为了使其对其他用户也可用,请执行以下命令
chmod a+x /root
完成此操作后,我们应该为每个 WORKER 安装一个服务。例如,假设 Worker 名称是 Mailer。
要安装,请使用以下命令(作为 root)
cd /Diretorio/Projeto
daemonize install name-of-my-job \
--template=initd \
"\\BeansqueueWorker\Process\Daemon::execute" \
"vendor/autoload.php" \
"./" \
"" \
'queueName=Caminho.Da.Classe.MinhaClasse' \
'queueConfig={"serverIp":"beanstalkd", "maxThreads": "1", "autoloadPath":"vendor/autoload.php", "workingPath":"./"}'
配置完成后,要启动,只需运行
service name-of-my-job start
测试您的 Worker
作为独立进程运行 Worker 并传递负载
使用此选项测试您的 Worker
daemonize run "\\BeansqueueWorker\\Process\\CronTab::execute" \
"vendor/autoload.php" \
"./" \
'queueName=BeansqueueWorker.Sample.TryMe' \
'payload={"a": "10"}'
作为守护进程运行,消费 beansktalk 服务器的负载
daemonize run "\\BeansqueueWorker\\Process\\Daemon::execute" \
"vendor/autoload.php" \
"./" \
'queueName=BeansqueueWorker.Sample.TryMe' \
'queueConfig={"serverIp":"beanstalkd", "maxThreads": "1"}'
以单元测试运行 Worker
实现接口所需的 execute
类包含运行您的应用程序所需的所有代码。
因此,只需实例化它并应用必要的单元测试即可。