Ö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:
- Günlükleme (iyi iletiler ve uygun düzeyler).
- Değiştirilebilir ve yapılandırılabilir ileti kodlayıcıları.
- 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
- Tüketilen iletiler için
Ack()
veNack()
desteği. -
Nack()
kullanarak tüketilen iletilerin tekrar iletilebilir olmasının desteklenmesi. - 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.
- Performans optimizasyonu.
- GoDocs, Markdown belgeleri ve giriş örnekleri.