Symfony Messenger modülü, modern PHP projelerinde mesajların asenkron ve senkron işlenmesini sağlayan güçlü bir bileşendir. Bu yazıda, Symfony Messenger’ın kurulumu, temel yapılandırması ve kullanımına dair detaylara odaklanıyoruz. Bu, özellikle yüksek trafikli uygulamalarda işlem yükünü dağıtmak veya zaman uyumsuz görevleri yönetmek isteyen geliştiriciler için önemli bir araçtır.
İlk olarak, Symfony Messenger’ı projeye eklemek için Composer kullanılır. Terminalde şu komutu çalıştırmak yeterlidir:
1composer require symfony/messenger
Bu adımla, temel kütüphane projeye entegre edilir ve yapılandırma dosyasında gerekli ayarların yapılması gerekir. Symfony’nin konfigürasyon dosyası olan config/packages/messenger.yaml içinde, mesajların nerede saklanacağı ve nasıl iletileceği belirlenir.
Örneğin, en yaygın kuyruk kullanımı için, Symfony’nin desteklediği birkaç mesaj taşıma sistemi (transports) yapılandırılabilir:
123456789
framework:
messenger:
default_bus: messenger.bus.default
transports:
async:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
routing:
'App\Message\YourMessage': async
Burada, MESSENGER_TRANSPORT_DSN ortam değişkeni, kullanılacak mesaj iletim altyapısına göre ayarlanmalıdır. Örneğin, RabbitMQ veya Redis gibi sistemler tercih edilebilir. Ayrıca, mesajların gönderilip alınması için ilgili mesaj sınıflarını ve handler’larını oluşturmak gerekir.
Örnek bir mesaj sınıfı:
1234567891011121314151617
namespace App\Message;
class ExampleMessage
{
private $content;
public function [b]construct(string $content)
{
$this->content = $content;
}
public function getContent(): string
{
return $this->content;
}
}
Handler ise şu şekilde tanımlanır:
123456789101112131415
namespace App\MessageHandler;
use App\Message\ExampleMessage;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
class ExampleMessageHandler implements MessageHandlerInterface
{
public function [/b]invoke(ExampleMessage $message)
{
// Mesaj içeriğini işleme kodu
// Örneğin, loglama, API çağrısı, veritabanı işlemleri
// $message->getContent() ile içeriğe ulaşılır
}
}
Symfony Messenger, bu yapılandırma ve kodlama ile mesajların hem senkron hem de asenkron şekilde işlenmesini sağlar. Asenkron işlemler için kuyruklar ve arka plan işleyiciler konfigüre edilerek, uygulama performansı ve ölçeklenebilirlik artırılır. Ayrıca, cron veya worker süreçleri ile mesajlar sürekli takip edilip, işlenebilir hale gelir.
Bu temel bilgilerle, Symfony Messenger’ı projeye entegre edip, mesaj tabanlı mimarinin ilk adımlarını atmak mümkündür. Yüksek trafikli uygulamalarda görevleri dağıtmak ve sistem performansını optimize etmek için oldukça verimli bir araçtır.