Özel Yayıncı/Abone Arayüzü

Özel yayıncı/abone desteği eklemek için message.Publisher ve message.Subscriber arayüzlerini uygulamanız gerekmektedir.

Tam kaynak kod: github.com/ThreeDotsLabs/watermill/message/pubsub.go

// ...
type Publisher interface {
    // Publish, belirtilen konuya sağlanan iletileri yayınlıyor.
    //
    // Yayınlama, uygulamaya bağlı olarak senkron veya asenkron olarak gerçekleştirilebilir.
    //
    // Çoğu yayıncı uygulaması atomik ileti yayınlamayı desteklemez.
    // Bu, bir ileti yayınlanamadığında bir sonraki ileti yayınlanmayacığı anlamına gelir.
    //
    // Yayınlama işlemi, thread-safe olmalıdır.
    Publish(topic string, messages ...*Message) error
    // Eğer yayıncı asenkron ise, Close gönderilmemiş iletileri flush etmelidir.
    Close() error
}

// Subscriber, yayıncı/abonenin tüketen kısmıdır.
type Subscriber interface {
    // Subscribe, sağlanan konudan alınan iletiler için bir çıktı kanalı döndürür.
    // Kanal, abonenin Close() ile çağrıldığında kapanacaktır.
    //
    // Bir sonraki iletiyi almak için, alınan ileti üzerinde Ack() çağrılmalıdır.
    // Eğer ileti işleme alınırken başarısız olursa ve ileti tekrar iletilecekse, Nack() çağrılmalıdır.
    //
    // Sağlanan ctx iptal edildiğinde, abone aboneliği ve çıktı kanalını kapatır.
    // Sağlanan ctx, tüm oluşturulan iletlere ayarlanır.
    // Nack veya Ack iletileri çağrıldığında, iletilen iletilerin bağlamı iptal edilir.
    Subscribe(ctx context.Context, topic string) (

Yapılacaklar Listesi

Unutmamanız gereken birkaç nokta:

  1. Günlükleme (iyi iletiler ve uygun düzeyler).
  2. Değiştirilebilir ve yapılandırılabilir ileti kodlayıcıları.
  3. Yayıncılar ve aboneler için Close()'ın uygulanması şunlara dikkat etmelidir:
    • Kimliklendirilebilir
    • Yayıncı veya abonenin bloke olduğunda (örneğin, Ack beklemeniz durumunda) düzgün çalışabilme özelliği
    • Abonenin çıktı kanalı bloke olduğunda (çünkü onu dinleyen birisi yok) düzgün çalışabilme özelliği
  4. Tüketilen iletiler için Ack() ve Nack() desteği.
  5. Nack() kullanarak tüketilen iletilerin tekrar iletilebilir olmasının desteklenmesi.
  6. Genel yayıncı/abone testleri kullanılmalıdır. Hata ayıklama ipuçları için test hata ayıklama kılavuzuna başvurmalısınız.
  7. Performans optimizasyonu.
  8. GoDocs, Markdown belgeleri ve giriş örnekleri.