← Bütün Patternlər
📢

Publish-Subscribe

Publisher mesajı topic-ə atır, kimdir subscribe olan — hamısı alır. Publisher-ın subscriber-i tanımasına ehtiyac yoxdur.

🎯
Nə üçün lazımdır?

Servislər arasında loose coupling: Publisher kimi dəyişikliyi göndər, kimlər eşitsə eşitsin — sənə aidiyyatı yoxdur.

📨
Asinxron Əlaqə

Publisher mesajı atıb gedər. Subscriber-lar öz temposu ilə oxusun. Fire-and-Forget + Guaranteed Delivery.

🛠️
Alətlər

Apache Kafka, RabbitMQ, Redis Pub/Sub, Google Cloud Pub/Sub, AWS SNS/SQS.

İNTERAKTİV

Vizual İzah

Mərhələ {{ currentStep + 1 }}: {{ steps[currentStep].title }}

📤
Publisher
(Order Service)
📨 OrderCreated
📋
Topic
(orders)
→→→
📧
Email Svc
📦
Inventory
📊
Analytics
JAVA

Kod Nümunəsi — Kafka

OrderEventPublisher.java
@Service
public class OrderEventPublisher {

    private final KafkaTemplate<String, OrderEvent> kafka;

    public void publishOrderCreated(Order order) {
        OrderEvent event = new OrderEvent(order.getId(), "CREATED");
        kafka.send("orders", order.getId().toString(), event);
        // Publisher işini bitirdi — subscriber-ları bilmir!
    }
}
EmailListener.java (Subscriber)
@Component
public class EmailListener {

    @KafkaListener(topics = "orders", groupId = "email-group")
    public void onOrderCreated(OrderEvent event) {
        emailService.sendConfirmation(event.getOrderId());
    }
}
✅ Üstünlükləri
  • Loose coupling — publisher subscriber-ı bilmir
  • Yeni subscriber əlavə etmək publish tərəfi dəyişdirmir
  • Asinxron — sürəti artırır, blocking yoxdur
⚠️ Riskləri
  • Mesaj sırası (ordering) zəmanət verilmir (Kafka-da partition daxilində verilir)
  • Debugging çətinləşir (mesaj haraya getdi?)
  • Duplicate message riski (idempotent etmək lazım)