2015-04-23 13 views
5

Şu anda ES sorgularım için laravel-elasticsearch sağlayıcısını kullanıyorum. Bunu laravel kuyruğum tarafından işlenen bir işin içinde kullanıyorum (beanstalkd kullanarak). Sahip olduğum problem, uzun süren işlerde, artık elasticsearch'e veri ekleyemem. İş sadece kilitleniyor (istisna yok) Ben ES çağrısı yaptığım yere kadar daralttım. Bağlantımın nasıl yeniden bağlanıp tekrar bağlanmaması mümkün mü? Benim diğer düşüncem, bir Cephe ve bir tektonun kullanılmasıyla ilgili bir şey olması.ElasticSearch sorgusu laravel iş kuyruğunda kilitleniyor

Burada yaptığım şey, bu benim tam kodum değil. Ancak kod, uzun süre çalışan bir işte çalıştırılmadığında gayet iyi çalışıyor. Sadece bazı context.it eklentileri vermek istedim, uzun bir süreçten sonra çalıştırılana kadar kod işleyişinde herhangi bir sorun yok.

GÜNCELLEME:

Bir bağlantı devam eden elasticsearch-php kütüphaneye sorunu daraltmıştır. ES'leri, 5 dakika sonra TCP bağlantılarını zamanlayan bir yük dengeleyicisinin arkasında var. Sorun, ES php kütüphanesinde hayatta kalmanın olmamasıdır. 5 dakika sonra bağlantı kapatıldı ancak bağlantıyı sonda kapatmıyor. elasticsearch-php için canlı tutmanın bir yolu var mı? veya bağlantıyı sıfırlamak için bir çağrı?

//run some functions.... 
$params = array(); 
$params['body'] = array('somefield' => 'some data'); 
$params['index'] = 'my_index'; 
$params['type'] = 'my_type'; 
$params['id'] = 'my_id'; 
$ret = Es::update($params);//this is working just fine 

//long running function here 
$newparams = array(); 
$newparams['body'] = array('somefield' => 'some data'); 
$newparams['index'] = 'my_index'; 
$newparams['type'] = 'my_type'; 
$newparams['id'] = 'my_id'; 
$return = Es::update($newparams);//this will just hang 
+0

, ES'den ziyade iş başarısızlıkla ilgili bir soruna benziyor.başarısız işler mi yapıyorsunuz? –

+0

Başarısız işlerle uğraşıyorum, ancak iş başarısız oluyor, yalnızca bir zaman aşımı olmadan ES'ye bağlanmaya çalışıyormuş gibi kilitleniyor – arrowill12

cevap

0

ES istemcisi oluştururken aşağıdaki ayarı eklemek oldu. Bu birinin dışarıya çıkmasını umarız.

4

Çevresinde toplanın ve uzun süreli sıra işlemleri hakkında konuşalım.

Laravel kuyrukları işçilerle birlikte çalışır. Bu rahmetsiz elfler işleri kuyruğumuzdan alır ve onları zamanında işler. Bununla birlikte, uzun süre aralıksız devam eden çalışmalardan sonra, elflerimiz yorulmaya başlar ve rastgele hatalar yaratır. Hata türleri, veritabanı işlemlerini işlemek için to send mail using SwiftMailer hatası veya connect to SSL ports içerir.

Elflerimizin ihtiyacı olan şey, her 20 dakikada bir queue:restart şeklinde bir enerji içeceğidir.

Adımlar

uygulamak için: Konsolda linux, türüne ise

1) vim kullanarak sudo crontab -e

2), sizin laravel yolundan ile /path/to/my/laravel/installation değiştirin aşağıdaki satırları 0,20,40 * * * * cd /path/to/my/laravel/installation && php artisan queue:restart --env=yourenvironment 1>> /dev/null 2>&1

girmek . Laravel'in ortam adıyla

Ve yourenvironment.

Kaynak: vardiya31'in paketi kullanılarak gerçek zamanlı olarak bir aylık çalışma süresi ve laravel sorgulaması ve verileri güncelleyerek bir elasticsearch yüklemem var.

Dokümantasyon: Bu sorunu çözmek için yapıyor sona ne http://laravel.com/docs/5.0/queues#daemon-queue-worker

+0

Kuyruğa yeniden başlamıyor, işlenmekte olan mevcut işi mi öldürüyorsunuz? – arrowill12

+0

Sırayı yeniden başlatmayı denedim, şans yok. lütfen benim güncellemeye bir göz atın. – arrowill12

+0

Bir sıranın yeniden başlatılması, şu anda işlenen iş tamamlanana kadar bekler. Dolayısıyla veri kaybı yok. – Mysteryos

İlgili konular