BotreamDokümanlar Web sitesi English v0.1.1

İş kuyrukları

Bir iş kuyruğu, bir görevin veya bir kişinin eklediği ve bir ya da daha fazla robotun tek tek işlediği iş öğelerini (bir fatura, bir sipariş, bir talep) tutar; her öğe yeniden denemelerle birlikte kendi başına tamamlanmış veya başarısız olarak sonuçlanır.

Kuyruklar nasıl çalışır

  • Bir kuyruğun bir adı, bir açıklaması ve bir Retries (yeniden deneme) sayısı vardır.
  • Bir iş öğesi, verisini (bir kayıt veya herhangi bir değer), isteğe bağlı bir referansı (fatura numarası gibi bir iş anahtarı) ve bir önceliği taşır.
  • Bir üretici öğe ekler: queue --action:add içeren bir görev, Queues sayfasındaki bir kişi veya API üzerinden başka bir sistem.
  • Bir işçi görev öğeleri tek tek alır. Birkaç ajan aynı kuyruk üzerinde aynı anda çalışabilir; bir öğe hiçbir zaman iki çalıştırmaya verilmez.
  • Öğeler önceliğe göre (en yüksek önce), ardından geliş sırasına göre alınır.

Kuyruklar Botream veritabanında saklanır; ek bir bileşen gerekmez.

Öğe durumları

Durum Anlamı
New İşlenmeyi bekliyor.
In progress Onu işleyen bir çalıştırma tarafından alındı.
Completed İsteğe bağlı olarak bir sonuçla birlikte başarıyla işlendi.
Failed Nedeniyle birlikte kalıcı olarak başarısız oldu.

Referanslar yinelemeleri önler

Bir referansla öğe eklediğinizde, aynı referansa sahip bir öğe zaten New, In progress veya Completed durumundaysa öğe tekrar eklenmez. Bu referansa sahip Failed durumundaki bir öğe yenisini engellemez; böylece öğeyi yeniden gönderebilirsiniz.

Kuyruk oluşturma

Queues'u açın ve New queue'ya tıklayın:

  • Name: görevler kuyruğa bu adla başvurur, örneğin --queue:Invoices.
  • Description: öğelerin ne olduğu ve hangi görevin onları işlediği.
  • Retries: başarısız bir öğenin kalıcı olarak başarısız kalmadan önce kuyruğa kaç kez geri döneceği (0: hiçbir zaman, en fazla 100).

Liste her kuyruğu öğe sayılarıyla (new, in progress, completed, failed), Retries değeriyle ve ne zaman değiştiğiyle gösterir. Manage queues yetkisine sahip kullanıcılar (varsayılan olarak Developer) bir kuyruğu düzenleyebilir veya silebilir.

Uyarı: Bir kuyruğu silmek tüm öğelerini siler. Onu kullanan görevler, bu adla bir kuyruk yeniden var olana kadar başarısız olur.

Bir görevden öğe ekleme

queue --action:add kullanın. --output yeni öğenin kimliğini alır.

loop --type:datatable --table:$invoices$ --variable:invoice
    queue --action:add --queue:Invoices --data:$invoice$ --reference:$invoice.No$ --priority:1 --output:itemId
endloop
  • --data: öğe; bir kayıt ($invoice$) veya herhangi bir değer.
  • --reference (isteğe bağlı): iş anahtarı; yukarıya bakın.
  • --priority (isteğe bağlı, varsayılan 0): daha yüksek olan önce alınır.

Öğeleri bir döngüyle işleme

Çoğu işçi görev loop --type:queue kullanır. Kuyrukta yeni öğe kalmayana kadar her turda bir öğe alır:

loop --type:queue --queue:Invoices --variable:item
    log --message:"Invoice $item.Data.InvoiceNo$ (attempt $item.Attempt$)"
    runtask --name:"BookInvoice" --invoice:$item.Data$
endloop
  • Normal şekilde biten bir tur öğesini tamamlar.
  • Bir hatayla başarısız olan bir tur öğesini başarısız yapar ve döngü bir sonrakiyle devam eder; böylece tek bir hatalı öğe hiçbir zaman toplu işi durdurmaz.
  • Bir sistem hatası (öğe bulunamadı, zaman aşımı, ağ), kuyruğun yeniden deneme hakkı kaldığı sürece öğeyi geri koyar. Bir iş hatası (throw ile oluşturulan) öğeyi kalıcı olarak başarısız yapar: yeniden denemek verileri değiştirmez. Bkz. Hata yönetimi.
  • Tur içinde öğeyi queue --action:complete veya queue --action:fail ile kendiniz kapatabilirsiniz; bu durumda döngü ona dokunmaz.
  • break döngüyü geçerli öğeden sonra sonlandırır.

Döngü değişkeni bir kayıttır:

Özellik İçerik
$item.Data$ Öğenin verisi; alanları $item.Data.Field$ ile okuyun
$item.Reference$ Varsa referans
$item.Id$ Öğenin kimliği
$item.Attempt$ Bunun kaçıncı işleme turu olduğu (ilki için 1)

queue komutu

queue komutunun beş eylemi vardır. Tüm parametreler için queue komut başvurusuna bakın.

Eylem Ne yapar
add Bir öğe ekler; --output kimliğini alır.
next Bir sonraki yeni öğeyi alır ve bu çalıştırma için işleniyor olarak işaretler.
complete Bu çalıştırmanın aldığı öğeyi tamamlanmış olarak işaretler; --result onunla birlikte bir sonuç saklar.
fail Öğeyi --reason ile başarısız olarak işaretler.
count Öğeleri, isteğe bağlı olarak --status'a göre (new, inprogress, completed, failed) sayar.

Öğeleri elle işleme

Döngü yerine öğeleri kendiniz alıp kapatabilirsiniz:

queue --action:next --queue:Invoices --output:item
if --type:boolean --value:$item.Found$ --is:false
    log --message:"Nothing to do"
else
    try
        runtask --name:"BookInvoice" --invoice:$item.Data$ --bookingNoTo:bookingNo
        queue --action:complete --item:$item$ --result:$bookingNo$
    catch --error:err
        queue --action:fail --item:$item$ --reason:$err.Message$ --retry:true
    endtry
endif
  • next; Found, Id, Reference, Data, Attempt ve Priority içeren bir kayıt döndürür. Kuyrukta yeni öğe olmadığında Found false olur.
  • --retry olmadan fail kesindir: iş kararları için kullanın (fatura geçersiz). --retry:true ile öğe, kuyruğun yeniden deneme hakkı kaldığı sürece kuyruğa geri döner; teknik hatalar için kullanın.
  • Bir öğeyi yalnızca onu alan çalıştırma tamamlayabilir veya başarısız yapabilir.
queue --action:count --queue:Invoices --status:new --output:pending
log --message:"$pending$ invoices are waiting"

Not: queue komutu sunucuya ihtiyaç duyar: ajan her eylem için Botream Server'a sorar ve sunucu ajanın o çalıştırmayı yürüttüğünü denetler.

Yeniden denemeler

Bir öğenin Attempt değeri işleme turlarını sayar. Bir öğe yeniden denemeye izin verilerek başarısız olduğunda, denemesi kuyruğun Retries değerinden büyük olmadığı sürece New durumuna geri döner; bundan sonra nedeniyle birlikte Failed olarak kalır. Retries 2 olarak ayarlandığında bir öğe en fazla üç kez denenir.

Bir çalıştırma erken bittiğinde

Bir çalıştırma hâlâ In progress durumunda öğeleri varken sona erdiğinde (durdurulduğunda, çöktüğünde veya ajanı kaybedildiğinde), sunucu bu öğeleri serbest bırakır: her biri The run ended before the item was completed nedeniyle New durumuna ya da yeniden deneme hakkı kalmamışsa Failed durumuna geçer.

Queues sayfasında öğeleri yönetme

Bir kuyruğun öğelerini açmak için öğeler düğmesine tıklayın (veya kuyruğa çift tıklayın):

  • Duruma göre filtreleyin: her biri kendi sayısıyla All, New, In progress, Completed veya Failed.
  • Reference'a göre arayın.
  • Her öğe referansını (veya numarasını), ne zaman ve kim tarafından eklendiğini, durumunu, denemesini ve önceliğini, Data değerini (tüm değer için üzerine gelin) ve Outcome değerini gösterir: hata, sonuç veya onu işleyen çalıştırmaya bir bağlantı.

Manage queues yetkisine sahip kullanıcılar ayrıca şunları yapabilir:

  • Back to the queue: Failed durumundaki bir öğeyi, denemeleri sıfırlanmış olarak New durumuna geri koyar.
  • Delete: işlenmekte olmayan bir öğeyi siler.
  • Add items: JSON yapıştırın; tek bir öğe veya bir liste.

Öğeleri toplu yükleme

Add items'da bir öğe ya doğrudan verisinin kendisidir ya da data, reference ve priority içeren bir nesnedir:

[
  {"data": {"invoiceNo": "A-17", "total": 120}, "reference": "A-17"},
  {"data": {"invoiceNo": "A-18", "total": 80}, "reference": "A-18", "priority": 5}
]

Görevler bu alanları $item.Data.invoiceNo$ olarak okur. Tek seferde en fazla 5.000 öğe eklenebilir. Referansı kuyrukta zaten bulunan öğeler atlanır ve onay mesajı bunların kaç tane olduğunu bildirir.

Kuyrukları kimler kullanabilir

Yetki Erişim
Manage queues (varsayılan olarak Admin, Developer) Kuyruk oluşturma, düzenleme ve silme; öğe ekleme, yeniden deneme ve silme.
Run tasks (Runner da) Kuyrukları ve öğelerini görme.

Kuyrukların oluşturulması, değiştirilmesi ve silinmesi denetim kaydına işlenir.

İpucu: Bir kuyruk döngüsünün ne kadar iş yaptığını --measure:true ile ölçün; bkz. Performans ölçümü.

Botream 0.1.1 · Oluşturulma 2026-10-14