loading...

Pub/Sub messaging

mayronceccon profile image Mayron Ceccon ・1 min read

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.

pub-sub

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/

Posted on May 23 by:

mayronceccon profile

Mayron Ceccon

@mayronceccon

Desenvolvedor de aplicações, sempre buscando as melhores práticas e a resolução do problema apresentado. Focado em sistemas PHP, mas sempre aberto a novos conhecimentos.

Discussion

markdown guide