Skip to main content

MfrSyncJob

App\Jobs\MfrSyncJob

Queueable Background-Job, der MfrController::sync($entity) aufruft. Nutzt Laravel Queues, damit ein voller MFR→Common-Sync nicht den HTTP-Request blockiert.

Signatur

class MfrSyncJob implements ShouldQueue
{
public int $tries = 3;

public function __construct(
public string $entity
) {}

public function handle(): void
{
Log::info($this->entity . ' MFR Sync Job started at ' . now());
app(MfrController::class)->sync($this->entity);
Log::info($this->entity . ' MFR Sync Job finished at ' . now());
}
}

Dispatchen

use App\Jobs\MfrSyncJob;

// On-Demand
MfrSyncJob::dispatch('Companies');

// Mit Verzögerung
MfrSyncJob::dispatch('ServiceRequests')->delay(now()->addMinutes(5));

// Auf einer bestimmten Queue
MfrSyncJob::dispatch('Documents')->onQueue('mfr-sync');

Scheduling

Nutze den Laravel-Scheduler (routes/console.php), um regelmäßig zu syncen:

use App\Jobs\MfrSyncJob;
use Illuminate\Support\Facades\Schedule;

Schedule::job(new MfrSyncJob('Companies'))->hourly();
Schedule::job(new MfrSyncJob('ServiceRequests'))->everyFiveMinutes();
Schedule::job(new MfrSyncJob('TimeEvents'))->everyMinute();

Aktiviere den Scheduler im Server-Cron mit:

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

Queue-Worker starten

# Dev (siehe composer run dev — startet automatisch queue:listen + server)
php artisan queue:listen

# Production: queue:work mit Supervisor / Horizon
php artisan queue:work --queue=mfr-sync --tries=3 --timeout=300

Tries & Timeouts

  • $tries = 3 — bei Fehler bis zu 3 Versuche

  • Pro Sync-Lauf können viele tausend Records geladen werden → setze --timeout=300 (oder höher) im Queue-Worker, oder dekommentiere im Job:

    public int $timeout = 300;

Failed-Jobs

Bei Failure landet der Job in der failed_jobs-Tabelle und kann mit:

php artisan queue:retry all
php artisan queue:flush # alle ausgefallenen Jobs droppen

erneut angestoßen werden.

Ein gescheiterter Sync ist meistens ein Auth-Problem (Basic-Cred falsch) oder ein Timeout auf MFR-Seite. Erste Anlaufstelle: Log::info Logs unter storage/logs/laravel.log.