php beanstalkd使用,php-在远程服务器上运行beanstalkd worker

我的堆栈设置包括以下内容

Machine1-主服务器(正在运行的laravel)

Machine2-Laravel代码库的MySql Server

Machine3-豆茎工人

我在Machine1上设置了Supervisord,并添加了以下队列侦听器

[program:queue1]

command=php artisan queue:listen --queue=queue1 --tries=2

...

我的laravel队列配置文件(app / config / queue.php)读取以下内容

'beanstalkd' => array(

'driver' => 'beanstalkd',

'host' => '--- Machine3 IP ---',

'queue' => 'queue1',

'ttr' => 60,

),

而且我已经在Beanstalk控制台上与Machines3一起安装了beantalkd,可以看到我的任务被推送到队列并成功执行.但是我不确定Machine3是否真的在执行它们,我怀疑的原因是主服务器上的CPU使用率很高,而Machine3上的CPU使用率没有峰值

我完全关闭了beantalkd服务器,以检查队列是否仍在处理,结果是laravel报告错误,表明它无法连接到beantalkd服务器.

我读过某个地方,您也需要在Beanstalkd服务器(Machine3)上安装laravel代码库,这真的是要走的路吗?

解决方法:

无论运行队列的机器是哪台机器,请执行以下操作:实际处理队列的机器.

目前,您所要做的只是将队列存储在machine3上,但在machine1上进行处理.

因此,如果希望机器3处理队列,则需要让它运行queue:listen命令.

标签:laravel-4,beanstalkd,pheanstalk,php

来源: https://codeday.me/bug/20191121/2049508.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Beanstalkd 是一个轻量级的分布式消息队列,可以用于异步任务处理和消息传递等场景。在 PHP使用 Beanstalkd 可以使用 Pheanstalk 库,该库提供了操作 Beanstalkd 的 API 接口。 要实现 PHP Beanstalkd 的并发非堵塞,可以使用多进程的方式来处理任务,同时使用非阻塞 IO 函数来避免进程阻塞。具体实现的步骤如下: 1. 安装 Pheanstalk 库: ```bash composer require pda/pheanstalk ``` 2. 创建一个任务处理类: ```php class TaskHandler { public function handle($job) { // 处理任务的逻辑 // ... } } ``` 3. 创建多个进程来处理任务: ```php use Pheanstalk\Pheanstalk; $beanstalk = new Pheanstalk('127.0.0.1'); $taskHandler = new TaskHandler(); $processCount = 10; // 进程数 for ($i = 0; $i < $processCount; $i++) { $pid = pcntl_fork(); if ($pid == -1) { // 创建进程失败 die('fork failed'); } elseif ($pid == 0) { // 子进程 while (true) { // 从 Beanstalkd 中获取任务 $job = $beanstalk->reserve(0); if ($job) { // 处理任务 $taskHandler->handle($job); // 删除任务 $beanstalk->delete($job); } // 非阻塞 IO,等待一段时间后再次尝试获取任务 usleep(1000); } } } ``` 4. 将任务添加到 Beanstalkd 中: ```php use Pheanstalk\Pheanstalk; $beanstalk = new Pheanstalk('127.0.0.1'); $data = [ 'name' => '张三', 'age' => 18, ]; // 将任务添加到 Beanstalkd 中 $beanstalk->useTube('my-tube')->put(json_encode($data)); ``` 当有任务添加到 Beanstalkd 中时,多个进程会同时尝试获取任务并处理,从而实现了并发非堵塞。需要注意的是,为了避免进程阻塞,需要使用非阻塞 IO 函数来等待任务的到来,同时也要注意进程间的资源竞争问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值