<p>İşleri zincirleme (katı sıra):<br/></p>
<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="nc">SendInvoice</span><span class="o">::</span><span class="nf">withChain</span><span class="p">([</span>
<span class="k">new</span> <span class="nc">SyncToERP</span><span class="p">(</span><span class="nv">$order</span><span class="o">-&gt;</span><span class="n">id</span><span class="p">),</span>
<span class="k">new</span> <span class="nc">NotifyAccountant</span><span class="p">(</span><span class="nv">$order</span><span class="o">-&gt;</span><span class="n">id</span><span class="p">),</span>

])->dispatch($order->id);

<hr/>

<h2>Adım 5 — Gerçekten İhtiyacınız Olan Güvenilirlik Desenleri</h2>
<ul>
    <li><strong>İdempotans</strong>: <code>WithoutOverlapping($key)</code> kullanın; işleri küçük ve <em>durumsuz</em> tutun.</li>
    <li><strong>afterCommit()</strong>: Sadece DB işlemi onaylandıktan sonra kuyruğa ekleyin.</li>
    <li><strong>Zaman aşımı &amp; denemeler</strong>: Her iş (veya her işçi) için <code>$timeout</code> ve <code>$tries</code> tanımlayın.</li>
    <li><strong>Geri çekilme</strong>: Geçici kesintilere dayanmak için <code>[5,30,120]</code> gibi diziler kullanın.</li>
    <li><strong>Oran sınırlama</strong>: <code>RateLimited('emails')</code> kullanarak sağlayıcıdan gelen trafikteki kısıtlamaları önleyin.</li>
    <li><strong>Hızlı başarısız ol, incele</strong>: Horizon, başarısız işleri gösterir; düzeltip <code>queue:retry all</code> kullanın.</li>
</ul>

<p>Başarısız işler CLI'sini kullanacaksınız:<br/></p>
<div class="highlight js-code-highlight">
    <pre class="highlight shell"><code>php artisan queue:failed

php artisan queue:retry all
php artisan queue:forget {id}

<hr/>

<h2>Adım 6 — Horizon: Öncelikler, Dengeler, Metrikler</h2>
<p><code>config/horizon.php</code> örneği (bir yüksek öncelikli kuyruk + bir medya için):<br/></p>
<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="s1">'defaults'</span> <span class="o">=&gt;</span> <span class="p">[</span>
<span class="s1">'supervisor-1'</span> <span class="o">=&gt;</span> <span class="p">[</span>
    <span class="s1">'connection'</span> <span class="o">=&gt;</span> <span class="s1">'redis'</span><span class="p">,</span>
    <span class="s1">'queue'</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s1">'high'</span><span class="p">,</span> <span class="s1">'media'</span><span class="p">,</span> <span class="s1">'default'</span><span class="p">],</span>
    <span class="s1">'balance'</span> <span class="o">=&gt;</span> <span class="s1">'auto'</span><span class="p">,</span>      <span class="c1">// basit | otomatik</span>
    <span class="s1">'minProcesses'</span> <span class="o">=&gt;</span> <span class="mi">2</span><span class="p">,</span>
    <span class="s1">'maxProcesses'</span> <span class="o">=&gt;</span> <span class="mi">10</span><span class="p">,</span>
    <span class="s1">'tries'</span> <span class="o">=&gt;</span> <span class="mi">3</span><span class="p">,</span>
    <span class="s1">'timeout'</span> <span class="o">=&gt;</span> <span class="mi">60</span><span class="p">,</span>
    <span class="s1">'nice'</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span>
<span class="p">],</span>

],

<p>Horizon'ı başlatın (yerel):<br/></p>
<div class="highlight js-code-highlight">
    <pre class="highlight shell"><code>php artisan horizon

<p>Üretim (systemd örneği):<br/></p>
<div class="highlight js-code-highlight">
    <pre class="highlight ini"><code><span class="c"># /etc/systemd/system/horizon.service</span>

[Unit]
Description=Laravel Horizon
After=redis.service

[Service]
User=www-data
Restart=her zaman
ExecStart=/usr/bin/php /var/www/app/artisan horizon

[Install]
WantedBy=multi-user.target

<blockquote>
    <p>Yayın ipucu: <code>php artisan horizon:terminate</code> komutunu sürüm sırasında çalıştırın; Horizon, yeni kodla işçileri nazikçe yeniden başlatacaktır.</p>
</blockquote>

<hr/>

<h2>Gözlemlilik</h2>
<ul>
    <li><strong>Horizon</strong>: kuyruk uzunlukları, çalışma süresi, verim, başarısız işler.</li>
    <li><strong>Telescope</strong>: her isteği, iş gönderimlerini, DB sorgularını, günlükleri.</li>
    <li><strong>Uyarılar</strong>: başarısız işler veya uzun çalışma süreleri için bir Slack webhook'u kullanın.</li>
</ul>

<hr/>

<h2>Üretim Kontrol Listesi (kopyala/yapıştır)</h2>
<ul>
    <li>[ ] <code>QUEUE_CONNECTION=redis</code></li>
    <li>[ ] Horizon kurulu &amp; bir denetim altında çalışıyor</li>
    <li>[ ] Ayrı kuyruklar: <code>high</code>, <code>emails</code>, <code>media</code>, <code>webhooks</code></li>
    <li>[ ] <code>$tries</code>, <code>$timeout</code>, ve <code>$backoff</code> her iş için ayarlandı</li>
    <li>[ ] DB yazımlarıyla tetiklenen işler için <code>afterCommit()</code></li>
    <li>[ ] Ara yazılım: <code>WithoutOverlapping</code> / <code>RateLimited</code></li>
    <li>[ ] Başarısızlıklar için metrikler + uyarılar</li>
    <li>[ ] Yayında nazik yenilemeler (<code>horizon:terminate</code>)</li>
</ul>

<hr/>

<h2>Paylaşılabilir Tek Ekran Görseli</h2>
<div class="highlight js-code-highlight">
    <pre class="highlight diff"><code><span class="gd">- // YAVAŞ (yanıtı bloke eder)

Kaynak: Orijinal Makale

Bu Makaleyi Paylaş