- Publicado por
Arquitetura Pub Sub Observer
- Authors

- Name
- Gabriel Gava Pinheiro
Arquitetura Pub/Sub
Introdução
A arquitetura Pub/Sub, abreviação de Publicador/Assinante, é um padrão de design de mensagens amplamente utilizado em sistemas distribuídos. Nesta arquitetura, os produtores de mensagens (publicadores) não enviam suas mensagens diretamente aos consumidores (assinantes). Em vez disso, as mensagens são categorizadas e publicadas em um tópico. Os assinantes se inscrevem nesses tópicos e consomem as mensagens de acordo.
- Arquitetura Pub/Sub
- Introdução
- Vantagens da Arquitetura Pub/Sub
- Onde a Arquitetura Pub/Sub é Usada
- Exemplos de Implementações de Pub/Sub
- Google Cloud Pub/Sub
- Apache Kafka
- RabbitMQ
- AWS SNS (Simple Notification Service)
- Codigo na Prática
- Exemplo de Implementação em C++
- Adaptabilidade a Mudanças
- Conclusão
Vantagens da Arquitetura Pub/Sub
- Desacoplamento: Produtores e consumidores operam independentemente, melhorando a manutenção e a escalabilidade.
- Flexibilidade: Novos assinantes podem se inscrever em tópicos a qualquer momento sem afetar os publicadores.
- Escalabilidade: A arquitetura suporta um grande número de produtores e consumidores.
Onde a Arquitetura Pub/Sub é Usada
- Sistemas de Mensagens em Tempo Real: Como em chats e notificações push.
- Integração de Aplicações Empresariais: Para sincronizar dados entre diferentes sistemas.
- Processamento de Eventos e Análises: Como em sistemas de telemetria e monitoramento.
Exemplos de Implementações de Pub/Sub
Google Cloud Pub/Sub
Oferece uma infraestrutura global para mensagens e streaming de dados, escalável e totalmente gerenciada.
Apache Kafka
Um sistema de streaming distribuído que funciona como uma plataforma de mensagens robusta, escalável e de alta performance.
RabbitMQ
Um broker de mensagens que suporta vários protocolos de mensagens, sendo muito utilizado para operações de Pub/Sub.
AWS SNS (Simple Notification Service)
Um serviço de mensagens para a entrega de mensagens ou notificações em larga escala.
Codigo na Prática
A arquitetura Pub/Sub, abreviação de Publicador/Assinante, é um padrão de design de mensagens usado em sistemas distribuídos para desacoplar produtores e consumidores de mensagens.
Exemplo de Implementação em C++
A seguir, apresentamos um exemplo simplificado de implementação da arquitetura Pub/Sub em C++, conforme descrito no livro "Padrões de Projeto":
#include <iostream>
#include <list>
#include <string>
class Subscriber {
public:
virtual void update(const std::string &message_from_subject) = 0;
};
class Publisher {
std::list<Subscriber *> list_of_subscribers;
std::string message;
public:
void attach(Subscriber *subscriber) {
list_of_subscribers.push_back(subscriber);
}
void detach(Subscriber *subscriber) {
list_of_subscribers.remove(subscriber);
}
void notify() {
for (auto *subscriber : list_of_subscribers) {
subscriber->update(message);
}
}
void createMessage(std::string message) {
this->message = message;
notify();
}
};
class ConcreteSubscriber : public Subscriber {
public:
void update(const std::string &message_from_subject) override {
std::cout << "Message to subscriber: " << message_from_subject << std::endl;
}
};
int main() {
Publisher *publisher = new Publisher;
Subscriber *subscriber1 = new ConcreteSubscriber;
Subscriber *subscriber2 = new ConcreteSubscriber;
publisher->attach(subscriber1);
publisher->attach(subscriber2);
publisher->createMessage("Hello World!");
delete subscriber1;
delete subscriber2;
delete publisher;
return 0;
}
Adaptabilidade a Mudanças
Mudanças em tecnologias periféricas (como banco de dados, servidores web, frameworks) podem ser feitas com mínimo ou nenhum impacto na lógica de negócio. Isso é possível porque a comunicação com essas tecnologias é feita através de portas e adaptadores que podem ser facilmente substituídos ou modificados.
Conclusão
A arquitetura Pub/Sub é uma escolha robusta e escalável para sistemas que requerem comunicação eficiente entre componentes desacoplados. Sua aplicabilidade varia desde pequenas aplicações até grandes sistemas empresariais, destacando-se pela flexibilidade, desempenho e capacidade de integração.