Proje içinde 5 adet servis bulunmaktadır, çoğu HTTP
ile haberleşiyorken, bazıları RabbitMQ
ile haberleşiyor.
- Micro servis mimarisinde olmalıdır.
- Her servisin kendi database’i olmalıdır.
- Servisler kendi arasında Request atarak yada bir servis bus(rabbitmq yada kafka) vasıtasıyla konuşmalıdır.
- Test caseler yazılmalıdır.
- Sistem docker üzerinde çalışmalıdır.
- Laravel 10 yada daha yeni sürüm kullanılmalıdır.
api-gateway servisi, diğer servislere gitmek isteyen kullanıcıları yönlendirir ve burdan oturumlarını kontrol eder. Oturumu geçerli olan kullanıcı, diğer servislere erişebilir hale geliyor. Normal şartlarda dışarıya açık olması gereken tek servistir.
Diğer servislere, parametre olarak user_id
iletir.
security servisi, kullanıcı yönetimiyle ilgilenir ve kullanıcının oturumunu doğrular. Kullanıcının diğer servisleri kullanabilmesi için bu servisi kullanmalıdır.
- Sadece user modeli vardır
- User create hariç tüm endpointlere token ile gidilmelidir
- User oluşturulduktan sonra hoşgeldin maili gönderilmelidir (içerik önemsiz)
- User oluşturulduktan sonra kullanıcıya lisans atanmalıdır. (30 günlük demo lisans) (mümkünse rabbitmq üzerinden oluşturulmalıdır.)
license servisi, kullanıcının lisansıyla ilgilenir, lisansın süresi dolarsa kullanıcıyı bilgilendirir ve diğer servislere kullanıcılarla ilgili kısıtlamalar uygulanması için bilgi sağlar.
-
Her kullanıcının bir aktif lisansı olabilir
-
Lisans demo olabilir
-
Demo lisansı bir kez atanabilir
-
Demo lisans 30 gün kullanılabilir
-
Lisans maximum dosya boyutu bilgisi tutar (default 100 mb)
-
Lisans günlük gönderilecek dosya sayısını tutar (default 5)
-
Lisans kota bilgisi tutar
-
Cron ile lisans kontrolü yapılıp, süresi dolmuşsa bildirim atıyor.
file-management servisi, kullanıcıların dosyalarıyla ilgilenir. file-management servisi, license
servisini de kullanır. Bunu kullanmasının sebebi; kullanıcının kısıtlamalarına göre hareket etmesini sağlamaktır.
- Dosya oluşturma ve transferinden sorumludur.
- Dosya S3, Minio gibi bir ortamda tutulabilir. Ancak Storage altında da olabilir. (Optional) // Storage
- File Create ederken upload yapılabilir.
- File Download edilmelidir.
- File Create Yada Upload aşamasında lisans kontrolü yapılmalıdır.
- Lisans üzerindeki kısıtlamalara uygun davranılmalıdır.
- Dosya yüklendiğinde yada silindiğinde bildirim gönderilmelidir.
- Kota aşım durumlarında da bildirim gönderilmelidir.
notification servisi, kullanıcının bildirimleriyle ilgilenir. Diğer servislerden yapılan bildirimleri, kullanıcıya bildirmek üzere toplar.
- Gönderilen notificationlar görüntülenebilmelidir (Horizon)
- Bu kısım ile ilgili redis sorunları yaşadım ve atladım, onun haricindeki maddeler tamamlandı.
- Bu serviste bir endpoint yoktur
- Haberleşme rabbitmq üzerinden yapılmalıdır
-
file-management, license, notification ve security servislerinde, her serviste
docker/supervisord.conf
dosyası var ve bu dosya ile servislerin ihtiyaç duyduğu bazı işlevleri yerine getirmesini sağlar. -
Notification servisi haricinde, tüm servislerde
Feature Test
yazıldı.
git clone https://github.com/ahmetbarut/microservice-task.git
docker-compose up # veya docker-compose up -d