{"id":15762776,"url":"https://github.com/ramonpaolo/rabbit-example","last_synced_at":"2026-01-21T10:36:08.433Z","repository":{"id":119278687,"uuid":"498029270","full_name":"ramonpaolo/rabbit-example","owner":"ramonpaolo","description":"Exemplo de uma aplicação NodeJs utilizando RabbitMQ","archived":false,"fork":false,"pushed_at":"2023-07-20T13:42:27.000Z","size":288,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-04-14T08:46:02.276Z","etag":null,"topics":["amqp","medium-article","nodejs","rabbitmq"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ramonpaolo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-30T17:00:45.000Z","updated_at":"2024-04-14T08:46:02.276Z","dependencies_parsed_at":"2024-12-19T19:15:24.570Z","dependency_job_id":null,"html_url":"https://github.com/ramonpaolo/rabbit-example","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ramonpaolo/rabbit-example","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonpaolo%2Frabbit-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonpaolo%2Frabbit-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonpaolo%2Frabbit-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonpaolo%2Frabbit-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ramonpaolo","download_url":"https://codeload.github.com/ramonpaolo/rabbit-example/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonpaolo%2Frabbit-example/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28631936,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T04:47:28.174Z","status":"ssl_error","status_checked_at":"2026-01-21T04:47:22.943Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amqp","medium-article","nodejs","rabbitmq"],"created_at":"2024-10-04T11:22:29.394Z","updated_at":"2026-01-21T10:36:08.402Z","avatar_url":"https://github.com/ramonpaolo.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Example RabbitMQ - Medium\n\n- [O que é esse projeto?](#o-que-é-esse-projeto)\n- [Como rodar o projeto?](#como-rodar-o-projeto)\n- [Como o projeto funciona?](#como-o-projeto-funciona)\n- [Problemas*](#problemas)\n\nArtigo no Medium: [O que é o RabbitMQ, e como utilizar?](https://medium.com/@ramonpaolo/o-que-%C3%A9-o-rabbitmq-e-como-utilizar-c3ce2406a983)\n\n# O que é esse projeto?\nEsse projeto, é fruto de um artigo feito no Medium, para explicar sobre o RabbitMQ.\n\nNesse projeto, você verá que está sendo utilizado uma arquitetura microservices, onde o RabbitMQ(Message Broker) tem o seu destaque, para fazer a comunicação entre os serviços. \n\nTópicos abordados no Artigo/Projeto:\n- O que é o RabbitMQ e o AMQP?\n- Para que utilizar o RabbitMQ?\n- Quais empresas utilizam o RabbitMQ?\n- Como utilizar o RabbitMQ no NodeJs\n- Boas práticas de segurança/robustez\n- Como utilizar RabbitMQ na Nuvem\n\n# Como rodar o projeto?\nPara rodar o projeto em sua máquina, basta clonar o repositório em sua máquina, e certificar que o Docker Daemon esteja rodando.\n```bash\n# Clonando o repositório\n$ git clone https://github.com/ramonpaolo/rabbit-example.git\n\n# Entrando no projeto\n$ cd rabbit-example\n\n# Entrando no serviço\n$ cd ./services/consumer\n\n# Instalando as dependências do serviço\n$ yarn\n\n# Entrando no serviço\n$ cd ../sender\n\n# Instalando as dependências\n$ yarn\n\n# Entrando na pasta raiz\n$ cd ../..\n\n# Subir os conteiners\n$ docker-compose up --build -d\n```\n\nApós isso, poderá visitar a URL: [http://localhost/sender/Testando](http://localhost/sender/Testando), onde será enviado a mensagem \"Testando\", para um tópico do RabbitMQ, onde outro serviço irá ouvir a mensagem.\n\nE poderá visitar a URL: [http://localhost/](http://localhost/), para visualizar os dados recebidos pelo RabbitMQ.\n\n---\n\n# Como o projeto funciona?\n\nAo fazer requisição GET para o endpoint *\"/sender/Message\"*, o Express irá receber a requisição, e irá enviar uma mensagem para o tópico \"topic\", usando o RabbitMQ.\n\nApós o envio da mensagem, o serviço \"consumer\", irá ouvir(consumir) a mensagem, e salvar a mensagem em um arquivo .txt, para quando for requisitado pelo endpoint \"/\", o nodejs possa ler o arquivo e entregar o conteúdo para o usuário.\n\nNGINX está sendo utilizado para fazer load balacing dos serviços, podendo assim, fazer quantas replicas de serviço, você desejar.\n\n---\n\n# Problemas*\nNão é bem um problema, pois na verdade, é uma solução de um problema, mas não é bem aceito.\n\nQuando se utiliza o RabbitMQ no Docker, ele demora alguns segundos para ficar pronto, e liberar a conexão do servidor RabbitMQ para os outros conteiners. E infelizmente, quando a aplicação NodeJs começa a rodar, o serviço RabbitMQ ainda não ficou totalmente funcional, logo, temos que dar um pequeno \"delay\" para a aplicação NodeJs se conectar com o RabbitMQ local.\n\nEsse problema poderia ser contornado, podendo utilizar o wait-for-it.sh.\nPorem, nesse caso, acabei utilizando o \u003ckbd\u003esetTimeout()\u003c/kbd\u003e, pois precisei utilizar apenas 2 linhas de código, para solucionar esse problema. Solução simples, que não depende de terceiros(shell script de outros).\n\nCaso o usuário for utilizar o RabbitMQ com a CloudAMQP, não precisa utilizar esse delay na aplicação NodeJs, podendo retirar o setTimeout, sem problemas.\n\nPor padrão, defini o delay do \u003ckbd\u003esetTimeout()\u003c/kbd\u003e, em 8000ms(8s), para dar tempo para o serviço do RabbitMQ ficar totalmente online e operante.\n\n---\n\n![GitHub top language](https://img.shields.io/github/languages/top/ramonpaolo/rabbit-example)\n![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/ramonpaolo/rabbit-example)\n![GitHub](https://img.shields.io/github/license/ramonpaolo/rabbit-example)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framonpaolo%2Frabbit-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Framonpaolo%2Frabbit-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framonpaolo%2Frabbit-example/lists"}