AWS SQSD’yi taklit etmek için PHP’de Daemon Line Siparişi Oluşturma

Bazen bir proje oluşturduğunuzda, üretimde geliştirme makinenizde olmayan bir mimari bölümü vardır. Eksik kısım (barındırma sağlayıcınız için özel bir yazılım gibi) bazen üretime uygulandığınızda istenmeyen bir sürpriz anlamına gelebilir. Son zamanlarda Megebot’taki çalışmalarımın bir parçası olarak, bunun üstesinden gelmeye karar verdim. Yerel motorumda Daemon SQS AWS Elastik Besttalk İşçi Ortamı (SQSD olarak bilinir) yok. AWS açık bir kaynak değildir, bu nedenle maalesef, onu çoğaltmanın resmi bir yolu yoktur. Bu yüzden işlevini çoğaltmaya çalışmak için küçük bir PHP komut satırı uygulaması oluşturmaya karar verdim.
Bu makalede, PHP’de komut satırı uygulamasını yapmanın bazı yönlerini tartışacağım ve SQSD CLI kopyama nasıl uyguladığımı açıklayacağım. Laravel vs SQSD önce, küçük bir açıklama. Laravel kuyruğu işçileri iş için bir kuyruk sistemi anketi (bizim durumumuzda SQ’lar) ile çalışır ve daha sonra sırayla çalıştırır (çünkü kuyruk işçileri uygulamanın bir parçasıdır). Bununla birlikte, AWS SQSD, herhangi bir uygulama tarafından kullanılabilmesi için çerçeveyi tamamen agnostik olarak tasarlamak için tasarlanmıştır. İş için SQS kuyruğu anketleri ve daha sonra elastik fasulye işçinizin düzenlemesinde belirtilen son noktaya gönderilmeleri ile çalışır (varsayılan http: // localhost). Bir iş herhangi bir nedenle başarısız olursa, çalışma manuel işleme için ölü mektup kuyruğu olarak adlandırılan şeye gönderilir.
AWS SQSD ayrıca elastik fasulye işçisi ortamı için başka özel işlevsellik içerir. Örneğin, uygulamanızın kökeninde Cron.yaml dosyasını, programa göre gerçekleştirilebilecek periyodik görevleri belirleyen okuyabilir. SQSD, program her tetiklendiğinde kuyruğa bir iş gönderir. Bu çalışma daha sonra her zamanki gibi SQSD tarafından işlenecektir, ancak CRON’da belirtilen yola yayınlanacaktır. YAML birkaç ek başlık ile. Bu, bir “cron” nun kuyruğa iş gönderebileceği otomatik ölçeklendirme ortamında kullanışlıdır ve kümedeki herhangi bir sunucunun çalışabileceği ve çalıştırabileceği. Örneğin, bir uzantısı olmayan bir dosya oluşturursanız. BASH betiğine benzer şekilde ilk sıraya Shebang eklediğimizi unutmayın. Bu, komut dosyasını UNIX tabanlı sistemde önceden önceden çağırmak zorunda kalmadan çalıştırmanıza olanak tanır (ancak bu makalede PHP’yi netlik için kullanacağız). Ardından, bir komut dosyası yürütülebilir: chmod +x mycliapp artık PHP CLI’nizi çalıştırarak çalıştırabilirsiniz:
PHP mycliapp umarım, merhaba dünyayı görmelisiniz! CLI’nize basılmıştır. Bu basit dosya, PHP CLI uygulamanız için bir giriş noktası görevi görecektir. Aslında, Laravel Artisan komutunu kullandıysanız, işte böyle çalışır. Symfony konsol çerçevesini kullanan SQSD CLI uygulamasını görürseniz dikkat edebilirsiniz. PHP’de birkaç CLI inşa ettim ve her zaman Symfony konsolu kullanıyorum ve kesinlikle tavsiye ediyorum. Bu makalede yaptığı her şeyi tartışmayacağım, ancak neler yapabileceğini görmek için belgelere bakmak için zaman ayırmanızı öneririm. Daemon daemon yapmak, bilgi işlem teriminde sadece arka planda süreci çalıştıran bir uygulama. Kullanıcılar çalıştığını bilmeyebilir, ancak durdurulana kadar süreci gerçekleştirmeye devam edecektir. SQSD Daemon olduğundan, bu işlevi PHP uygulamamda çoğaltmam gerekiyor.
Laravel işçilerinin bu “daemon” işlevselliğini nasıl ele aldığını ve sonunda benzer bir versiyonu uyguladığını görmeye karar verdim, ancak birçoğu işçi sınıfında soyuldu. Daemon yönteminin özü, sürekli olarak çalışırken (kesilene kadar) bir döngüdür: while (true) {$ this-> IsLeader = $ this-> IsLeaderProcess (); if (! $ this-> daemonshuldrun ()) {$ this-> pauseworker (); Devam et; } $ function (); $ this-> uyku (); $ this-> stopifNecsary (); } Buradaki fikir, $ function () ‘nın kapatılmasının her döngü olarak adlandırılacağı ve daha sonra döngüyü tekrar çalıştırmadan önce işlemin belirtilen süre (CPU mücadele etmekten kaçınmak için) uyuyacağıdır. Daha sonra bu işçi sınıfını Daemon yapmak için WorkCommand’da kullanabiliriz:
$ işçi = yeni işçi ($ options); // … return $ worker-> daemon (function () kullanım ($ sqsd, $ işçi, $ output) {if ($ worker-> isleader) {$ sqsd-> runperiodictTasks ();} $ sqsd-> checkformcessages ();}); PHP’de bir CLI uygulaması oluşturmak için bulmacanın son kısmının CLI uygulamasının paketlenmesi, kullanımı kolay olacak şekilde nasıl paketleneceğidir. İlk olarak, bağımlılıkları manuel olarak yüklemek zorunda kalmadan bağımsız bir paket olarak kullanılabilmesi için uygulamaları ikili olarak derlememiz gerekir. PHP bu ikili Phar Arşivleri olarak adlandırılır. Geçmişte Phar kullanmış olabilirsiniz, farkında olmasanız bile (örneğin, besteci bir PAR olarak dağıtılır). Üretim süreci çok kolay. Kutunuzla, proje kökünüzdeki Box.json dosyasını tanımlayabilirsiniz (SQSD için yaptığım şey budur), bazı seçenekleri belirleyebilir, ardından bir Phar Arşivi oluşturmak için kutu yapısını çalıştırabilirsiniz. Basit. Şimdi ikili dosyalarımız var, orada durabilir ve insanlara Phar’ı manuel olarak indirmelerini ve oldukları gibi kullanmasını söyleyebiliriz. Peki ya insanlar besteciler kullanarak projelerine SQSD paketleri yüklemek istiyorlarsa? Neyse ki besteci, paketimizin binari içerip içermediğini belirlememizi sağlayan bir “çöp” tuşuna sahiptir. Eğer öyleyse, satıcı/bin klasörüne ikili bir semboliktir, böylece şöyle çalıştırılabilir:

Php ./vendor/bin/sqsd.phar çalışması Şimdi insanlara diğer besteci paketleri (örneğin besteci Gilbitron/sqsd gerektirir) gibi paketlerimizi yüklemelerini söyleyebiliriz ve ikili yukarıdaki gibi çalıştırılabilir. Ek bir kayıt olarak, Laravel’in SQSD ile çalışmasını sağlayacak bir paket arıyorsanız, bir Dustio/Laravel-Aws-işçi paketi önerebilirim. Sonuç Bu makalede kısaca tartıştığım PHP’de CLI başvurusunun oluşturulmasının yönü, çoğu CLI uygulamasının temelidir. Açıkçası kendi başvurunuz farklı gereksinimler ve farklı bir şekilde çalışacak, bu yüzden burada yaptığım şeyi almak ve kendiniz yapmak için inşa etmekten çekinmeyin (eğer yaparsanız, kesinlikle buraya geri dönün ve bizi yorumlara bağladı !). Daha derine inmek istiyorsanız, SQSD kaynak kodunu görmenizi ve SQSD CLI’den nasıl daha karmaşık bir parça uyguladığımı görmenizi öneririm. PHP’de hiç CLI başvurusu yaptınız mı? Daha önce Symfony Box2 konsolunu kullandınız mı? Yerel motorunuza kopyalayabileceğinizi umuyorsunuz? PHP’de CLI uygulaması oluşturmak için ipuçlarınız veya püf noktalarınız var mı? Bize yorumlarda söyleyin.

admin

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir