İş 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:addiç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ı (
throwile 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:completeveyaqueue --action:failile kendiniz kapatabilirsiniz; bu durumda döngü ona dokunmaz. breakdö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,AttemptvePriorityiçeren bir kayıt döndürür. Kuyrukta yeni öğe olmadığındaFoundfalse olur.--retryolmadanfailkesindir: iş kararları için kullanın (fatura geçersiz).--retry:trueile öğ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:trueile ölçün; bkz. Performans ölçümü.