美文网首页程序员Laravel
关于 horizon 多副本问题

关于 horizon 多副本问题

作者: 追风骚年 | 来源:发表于2020-08-06 15:34 被阅读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 进程接受到了,就会加锁,防止其他进程继续去执行任务。

image.png

相关文章

网友评论

    本文标题:关于 horizon 多副本问题

    本文链接:https://www.haomeiwen.com/subject/xuazrktx.html