Publish/subscribe messaging ou pub/sub messaging, é uma forma de comunicação assíncrona service-to-service, utilizada em arquiteturas serverless e de micro-serviços.
O pub/sub permite uma comunicação segura e altamente disponível entre aplicativos criados de modo independente.
Em um modelo pub/sub, qualquer mensagem publicada para um tópico é imediatamente recebida por todos os subscribers deste tópico.
Conceitos
Mensagem: é a combinação de dados e atributos (opcionais) que um editor envia a um tópico e que é entregue aos assinantes.
Tópico: É um recurso nomeado para onde são enviadas as mensagens.
Publish: É quem envia a mensagem para um tópico.
Subscribe: É aquele que esta assinando determinada fila, e recebe as mensagens.
Na prática
Como exemplo criei um projeto, onde, tenho seis subscribers, que estão desenvolvidos em diferentes linguagens, Python, Go, Node, PHP. O publisher foi feito com Python.
Os subscribers estão "assinados" ao tópico topic_create_file.
A responsabilidade de cada subscriber é converter uma mensagem em JSON, para um outro tipo de arquivo, csv, html, xml, xls.
Pub/Sub
Ambiente utilizado
Versão | |
---|---|
ubuntu | 18.04 |
docker | 19.03.9 |
docker-compose | 1.25.4 |
python | 3.8.3 |
php | 7.4.6 |
node | 12.16.3 |
npm | 6.14.4 |
go | 1.14.3 |
Redis
docker-compose up --build
Instalação
Python
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Node
npm install
Go
go get github.com/gomodule/redigo/redis
PHP
composer install
Execução dos Subscribes
Python
python subscribes/service_csv.py
python subscribes/service_excel.py
python subscribes/service_html.py
Node
node subscribes/service_xml.js
Go
go run subscribes/service_csv.go
PHP
php subscribes/service_csv.php
Execução do Publisher
python publisher.py
Referências
https://cloud.google.com/pubsub/docs/overview?hl=pt-br
https://aws.amazon.com/pub-sub-messaging/
Top comments (0)