问题描述
由于 cpu 原因,我制作了一个 instagram 竞争者,它需要能够在不同的服务器上处理视频转换 (FFMPEG)。
目前我有一个本地 redis 服务器在工作,这样我就可以使用默认的 redis 配置/队列配置/数据库将任务推送到后台。
到目前为止,所有一切都在工作,现在我想进入下一步并设置一个桥接器,将密集型任务传递给专门用于执行视频处理任务的服务器。
总结我想要的
1.从SERVER1分派作业并发送到SERVER2 REdis QUEUE进行处理
用于 redis 的 SERVER1(默认)连接(配置/队列)
'redis' => [
'driver' => 'redis','connection' => 'default','queue' => env('REdis_QUEUE','default'),'retry_after' => 90,'block_for' => null,],
'default' => [
'url' => env('REdis_URL'),'host' => env('REdis_HOST','127.0.0.1'),'password' => env('REdis_PASSWORD',null),'port' => env('REdis_PORT','6379'),'database' => env('REdis_DB','0'),
我的尝试
SERVER2 连接
'videoProcessingRedis' => [
'driver' => 'redis','connection' => 'videoRedisQueue',
服务器 2 队列
'videoRedisQueue' => [
'url' => env('REdis_URL'),'https://website.ca/'),
工作/ConvertVideoForHLS
public function __construct(video $video)
{
$this->onConnection('videoProcessingRedis');
$this->onQueue('videoRedisQueue');
$this->video = $video;
}
通过上述尝试集,我没有收到任何错误,但是我无法查看该作业,甚至无法看到它已创建。即使使用 PHP artisan queue:listen 和 PHP artisan queue:listen videoProcessingRedis 我也看不到任何东西,Failed_jobs 表中什么也没有我的 supervisor.log 所以我假设它与它只是从主机反弹有关?
想法 1
将 SERVER2 Redis 服务器设置为面向公众
1.在/etc/redis/redis.conf文件中设置绑定选项
之前
bind 127.0.0.1
之后
bind 0.0.0.0
- 设置绑定后(允许所有访问)我将在 6379 上添加端口限制,只有 SERVER1 IP 才能连接
解决方法
在 Redis 队列上使用多个服务器时,您需要确保两个环境的 APP_NAME 变量具有相同的值。如果这些不同,那么工作人员将看不到作业。
要检查您的连接是否正常,您可以从服务器 1 运行 redis-cli -h {ip-of-server-2}
。