定制 hakanispirli/laravel-shared-worker 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

hakanispirli/laravel-shared-worker

最新稳定版本:v1.0.0

Composer 安装命令:

composer require hakanispirli/laravel-shared-worker

包简介

Production-ready Laravel Queue Worker optimized for shared hosting environments - No SSH, No proc_open required

README 文档

README

Paylaşımlı (shared) hosting ortamları için geliştirilmiş Laravel Queue Worker paketi.

Bu paket, proc_open, pcntl_signal, symlink gibi fonksiyonların kapalı olduğu sunucularda Laravel Queue sistemini sorunsuz çalıştırır.

Problem

Paylaşımlı sunucularda standart php artisan queue:work komutu çalışmaz çünkü:

  1. proc_open fonksiyonu güvenlik nedeniyle kapalıdır
  2. SSH erişimi genellikle yoktur
  3. Uzun çalışan process'ler otomatik sonlandırılır

Bu paket, bu kısıtlamaları aşarak queue sistemini cron job ile çalıştırmanızı sağlar.

Kurulum

composer require hakanispirli/laravel-shared-worker

Config dosyasını yayınlamak için (opsiyonel):

php artisan vendor:publish --tag=shared-worker-config

Yapılandırma

1. Queue Driver Ayarı

.env dosyasında:

QUEUE_CONNECTION=database

Jobs tablosu yoksa oluşturun:

php artisan queue:table
php artisan migrate

2. Schedule Tanımlaması

Laravel 11 ve üzeri - routes/console.php:

use Illuminate\Support\Facades\Schedule;

Schedule::command('queue:shared-worker --max-time=55 --memory=128')
    ->everyMinute();

Laravel 10 ve altı - app/Console/Kernel.php:

protected function schedule(Schedule $schedule)
{
    $schedule->command('queue:shared-worker --max-time=55 --memory=128')
        ->everyMinute();
}

3. cPanel Cron Job

cPanel kontrol panelinde Cron Jobs bölümüne gidin ve her dakika çalışacak şekilde ekleyin:

* * * * * /usr/local/bin/php /home/KULLANICI/public_html/artisan schedule:run >> /dev/null 2>&1

Not: PHP yolu sunucunuza göre değişebilir. Hosting firmanızdan öğrenebilirsiniz.

Parametreler

Parametre Varsayılan Açıklama
--max-time 55 Maksimum çalışma süresi (saniye)
--memory 128 Maksimum RAM kullanımı (MB)
--sleep 3 Kuyruk boşken bekleme süresi (saniye)
--queue default İşlenecek kuyruk adı
--connection database Queue connection
--tries 3 Maksimum deneme sayısı
--force - Bakım modunda çalıştır

Ortam Değişkenleri

Tüm ayarlar .env dosyasından özelleştirilebilir:

SHARED_WORKER_MAX_TIME=55
SHARED_WORKER_MEMORY=128
SHARED_WORKER_SLEEP=3
SHARED_WORKER_TRIES=3
SHARED_WORKER_LOCK=file
SHARED_WORKER_QUEUE=default
SHARED_WORKER_CONNECTION=database

Mail Gönderimi

Queue üzerinden mail göndermek için:

use HakanIspirli\SharedWorker\Jobs\MailJob;
use App\Mail\WelcomeMail;

// Mail'i queue'ya ekle
MailJob::dispatch(new WelcomeMail($user), $user->email);

// Belirli bir queue'ya ekle
MailJob::dispatch(new WelcomeMail($user), $user->email, 'emails');

Lock Mekanizması

Paket, aynı anda birden fazla worker çalışmasını engeller. Üç farklı yöntem desteklenir:

  • file - Varsayılan. storage/framework klasörünü kullanır.
  • database - Cache tablosunu kullanır.
  • cache - Laravel cache sistemini kullanır.
SHARED_WORKER_LOCK=file

Çalışma Mantığı

Cron (her dakika)
    |
    v
schedule:run
    |
    v
queue:shared-worker
    |
    v
Lock kontrolü --> Başka worker var mı? --> Evet --> Çık
    |
    Hayır
    v
Job al --> İşle --> Başarılı --> Sil
    |
    Başarısız
    v
Deneme hakkı var mı? --> Evet --> Tekrar kuyruğa ekle
    |
    Hayır
    v
failed_jobs tablosuna yaz
    |
    v
Süre/Memory kontrolü --> Limit aşıldı mı? --> Evet --> Çık
    |
    Hayır
    v
Tekrar başa dön

Örnek Job

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;

class SendNotification implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(
        public string $message
    ) {}

    public function handle(): void
    {
        // İşlem kodları
    }
}

Job'u çalıştırmak için:

SendNotification::dispatch('Merhaba!');

Sorun Giderme

Worker çalışmıyor

  1. Komutu manuel çalıştırın: php artisan queue:shared-worker
  2. Log dosyasını kontrol edin: storage/logs/laravel.log
  3. Jobs tablosunu kontrol edin: SELECT * FROM jobs

Overlapping sorunu

Lock dosyalarını temizleyin:

rm -rf storage/framework/shared-worker-locks/*

Job'lar işlenmiyor

  1. .env dosyasında QUEUE_CONNECTION=database olduğundan emin olun
  2. jobs tablosunun var olduğunu kontrol edin
  3. failed_jobs tablosunu kontrol edin

Lisans

MIT License

Geliştirici

Hakan İspirli - destek@webmarka.com

统计信息

  • 总下载量: 3
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-01-25

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固