关于 horizon 多副本问题
2020-08-06 本文已影响0人
追风骚年
系统的数据量也比较小,所以 horizon 始终也只起了一份,也担心 horizon 起了多份会造成代码重复执行。
所以就做了如下实验:
docker-compose scale laravel-horizon=10
本地的使用的是 laradock ,所以很容易就将 laravel-horizon 扩展了 10 个副本,
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp
laradock_laravel-horizon_1 /usr/bin/supervisord -n -c ... Up
laradock_laravel-horizon_10 /usr/bin/supervisord -n -c ... Up
laradock_laravel-horizon_2 /usr/bin/supervisord -n -c ... Up
laradock_laravel-horizon_3 /usr/bin/supervisord -n -c ... Up
laradock_laravel-horizon_4 /usr/bin/supervisord -n -c ... Up
laradock_laravel-horizon_5 /usr/bin/supervisord -n -c ... Up
laradock_laravel-horizon_6 /usr/bin/supervisord -n -c ... Up
laradock_laravel-horizon_7 /usr/bin/supervisord -n -c ... Up
laradock_laravel-horizon_8 /usr/bin/supervisord -n -c ... Up
laradock_laravel-horizon_9 /usr/bin/supervisord -n -c ... Up
laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
laradock_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
在工程里面 php artisan make:job TestJob
再定义一个 job:
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Redis;
class TestJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
cache()->increment("test");
}
}
执行Job:
dispatch(new TestJob);
通过 $ docker-compose up -d redis-webui
可以起一个 web 页面,页面中可以看到对应的 key 是每次都加一,而不是加十,所以这里推测是任务被一个 horizon 进程接受到了,就会加锁,防止其他进程继续去执行任务。
