как изменить laravel рабочих мест - PullRequest
0 голосов
/ 20 июня 2020

Я разрабатываю приложение для клиента, и он хочет начать некоторые задания в определенное время, я должен запускать его в заданиях, верно? например, он хочет опубликовать sh сообщение с 2 статусами опубликовано или ожидает и на странице отправки он может установить время для публикации sh сообщения, как я могу развить это в вакансиях?

ScanJob::dispatch($property->Name, $property->Owner, $Scan->id)->delay(Carbon::now()->addHour(Carbon::now()->diffInHours($Time)));

это моя первая попытка получить время разницы в часах и добавить его из задержки

1 Ответ

1 голос
/ 20 июня 2020

Существует два основных способа решения вашей проблемы:

  1. Создайте команду Laravel Artisan (вы также можете использовать другие методы, которые предоставляет Laravel, но я сочли Artisan интересным и более гибким, помогает избежать переделок) и планируйте его соответствующим образом.

  2. Создайте задание в очереди и отправьте его на некоторое время позже, но у него есть некоторые ограничения, например, служба очереди Amazon SQS имеет максимальное время задержки 15 минут.

Теперь, что делать:

  1. На мой взгляд, вам следует использовать Решение 1, так как оно более гибкое и дает вам больше контроля.
  2. Очереди используются для 2 вещей. Во-первых, в идеале задача, которую вы хотите выполнить, должна быть выполнена в течение следующих 30-45 минут. Во-вторых, задача требует много времени, и вы не хотите блокировать поток из-за этого.

Теперь часть FUN . Примечание. Не беспокойтесь, Laravel выполнит большинство шагов за вас. Я упоминаю каждый шаг, чтобы не пропустить знания.

Шаг 1 : выполните следующую команду, чтобы создать команду Artisan Console (не забудьте быть в * 1084 вашего проекта * путь.):

php artisan make:command PublishSomething

Теперь команда будет доступна для дальнейшей разработки по адресу app/Console/Commands.

Шаг 2 : вы увидите handle внутри класса, как показано ниже, здесь будут существовать все ваши logi c.

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class PublishSomething extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'something:publish';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Publishes something amazing!';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
    }
}

Шаг 3: Давайте добавим несколько logi c внутри нашего метода handle

/**
 * Execute the console command.
 *
 * @return mixed
 */
public function handle()
{
    $this->info('Publishing something cool!');
    // you can add your own custom logic here.
}

Шаг 4 : После того, как вы добавили свой лог c, теперь нам нужно его протестировать, вы можете сделать это, например:

php artisan something:publish

Шаг 5 : Наша функция работает нормально. Теперь запланируем команду. Внутри app/Console вы найдете файл Console.php, этот класс отвечает за всю регистрацию расписания задач, в нашем случае.

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        //
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('inspire')->hourly();
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}

Обратите внимание на функцию расписания здесь, здесь мы добавим расписание logi c.

Шаг 6 : Теперь мы запланируем запуск нашей команды каждые 5 минут. Вы можете очень легко изменить период времени, Laravel предоставляет некоторые готовые варианты частоты, и у вас также есть свое собственное расписание.

/**
 * Define the application's command schedule.
 *
 * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
 * @return void
 */
protected function schedule(Schedule $schedule)
{
    $schedule->command('something:publish')->everyFiveMinutes(); // our schedule
}

Шаг 7 : Теперь сам планировщик задач Laravel зависит от Cron. Итак, чтобы запустить расписание, мы добавим в наш crontab следующий файл.

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

Вот и все! Мы сделали. Вы создали свою собственную команду и запланировали ее на каждые 5 минут.

Вы можете узнать больше о Laravel Artisan Command & Laravel Планирование задач .

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...