Pub-Sub mesajlaşma

Merhaba!

Publish-Subcribe deseni, yazılım mimarisinde bileşenler arası mesajlaşmanın loosely-coupled ve asenkron olarak yapılmasını sağlayan bir yöntemdir.

Bulut bilişim’in son yıllarda gelişmesiyle birlikte birbirinden bağımsız ve kendi kendine yönetilebilir modüller yaygınlaştı. Pub-Sub deseni de cloud mimariye entegre olarak modüllerin birbiri ile haberleşmesinde kullanılabiliyor.

Observer vs Pub-Sub

Observer tasarım deseni ile benzer olmasına rağmen pub-sub’ın en önemli farkı publisher ve subscriber bileşenlerinin birbirinden haberi olmamasıdır. Bu sayede loosely-coupling kavramı sağlanmış olur. Oysa Observer deseninde observer ile observable nesneleri birbirine bağımlıdır. Bir diğer fark da Observer’ın senkron çalışması; Pub-Sub’ın asenkron olarak çalışabiliyor olmasıdır.

Bileşenler arası mesajlaşma, publisher ve subscriber arasında bulunan bir katman (message broker veya event bus) ile sağlanır. Bu katman publisher’dan gelen mesajları topic’lerine göre (topic-based system) veya mesaj içeriğine göre (content-based system) filtreleyerek, ilgili subscriber’lara iletir.

Örnek Pub-Sub Servis

Java ile örnek olması açısından basit bir pub-sub servis örneği oluşturdum. Publisher ve Subscriber class’ları belirli topicler üzerinden haberleşiyorlar.

Message

Message class’ı yalnızca topic ve mesaj içeren bir pojo.

Publisher

Publisher class’ı PubSubService ile bağımlı; Subscriber’lara herhangi bir bağımlılığı yok.

Subscriber

Aynı şekilde Subscriber class’ında da yalnızca PubSubService ile bağımlılık var.

PubSubService

PubSubService gelen mesajları topic’lerine göre ilgili subscriber’lara yönlendirmekle sorumlu.

Uygulamanın çıktısını görebilmek için oluşturduğum Main class’ı;

Çıktı

Messages of music subscribers; 
 Message{topic='music', message='New album is coming.'}
 Message{topic='music', message='New concert!'}
 Message{topic='music', message='New album is coming.'}
 Message{topic='music', message='New concert!'}
 Messages of news subscribers; 
 Message{topic='news', message='Brexit bla bla.'}

Bu uygulama asenkron çalışmıyor; ancak publisher ve subscriber birbirinden bağımsız olarak topic’ler üzerinden haberleşebildiler. Örnek uygulamanın tüm kodlarına buradan ulaşabilirsiniz.

Hoşçakalın!

Published by

Yusuf Kemal

Software Engineer

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s