Skip to content

feature: permite a customização de parâmetros relacionados a conexão de publishers e consumers do RabbitMQ - #32

Merged
asengardeon merged 13 commits into
asengardeon:mainfrom
ikedawalk:feature/customize-connection-parameters
Jul 31, 2025
Merged

feature: permite a customização de parâmetros relacionados a conexão de publishers e consumers do RabbitMQ#32
asengardeon merged 13 commits into
asengardeon:mainfrom
ikedawalk:feature/customize-connection-parameters

Conversation

@ikedawalk

@ikedawalk ikedawalk commented Jul 30, 2025

Copy link
Copy Markdown
Contributor

Contexto

Estamos desenvolvendo um projeto que já usa esta lib e que precisa se comunicar com filas externas, com configurações já dadas. No estado atual, a lib não pode ser usada, e o objetivo é trazer as mudanças necessárias para permitir esse caso de uso específico.

Algumas das configurações dessa fila externa que entram em conflito com a forma que a lib está hoje incluem:

  • Precisamos nos conectar a uma instância do RabbitMQ utilizando um virtual host e o protocolo ampqs
  • Precisamos nos conectar a filas e exchanges com tipos e configurações diferentes das atuais forçadas pela lib (ex: hoje só são permitidas exchanges do tipo topic e filas do tipo quorum)
  • Para a publicação de mensagens, precisaremos informar o parâmetro reply_to para que a aplicação responsável por consumir as mensagens saiba para qual fila retornar uma mensagem de resposta, e isto não é possível hoje
  • As filas e exchanges dessa instância não seguem o padrão de nomenclatura da lib esperado na definição da DLQ e DLX (ex: utilizam um "dot case" em vez de snake case; nome.da.fila.dlq em vez de nome_da_fila_dlq)

A estratégia para incluir as mudanças foi um pouco na linha de fazer o mínimo necessário para que as coisas sejam utilizáveis, dado esses casos de uso necessáros.

Exemplo: precisaremos enviar mensagens com o parâmetro reply_to para esse serviço externo, que utiliza essa informação para saber em qual fila jogar a resposta. Entretanto, hoje não temos um caso de uso esperado similar ao que eles fazem -- não há necessidade de que um consumer criado pela hijiki consiga lidar com esse parâmetro. Por isso, tudo o que foi feito foi permitir a publicação de mensagens com o reply_to, mas nada foi feito em relação ao consumo.

Mudanças

Para permitir o uso de virtual host e protocolo seguro amqps:

  • Foram adicionadas opções de incluir esses parâmetros, opcionais, no MessageManagerBuilder
  • O RabbitMQConnection foi alterado para considerar esses parâmetros durante a construção da URL e estabelecimento da conexão

Para permitir definir o tipo de exchange e o parâmetro reply_to na publicação:

  • Os arquivos das classes MessageManager -> MessageBroker/RabbitMQBroker -> RabbitMQPublisherAdapter foram alterados para incluir isso

Para permitir a customização de parâmetros relacionados aos tipos e argumentos de filas/exchanges, e nomes da DLQ/DLX de consumidores:

  • A classe ConsumerData foi alterada para permitir campos novos relacionados a isso
  • A classe ConsumerRabbitMQAdapter foi alterada para utilizar essas informações durante a criação/conexão com as filas/exchanges/dlqs/dlx
  • Foram adicionados testes automatizados cobrindo as mudanças introduzidas, com exceção da mudança relacionada ao parâmetro reply_to, já que hoje não há uma forma fácil de implementar um teste de integração que consiga verificar isso

@ikedawalk ikedawalk changed the title [wip] feature: permite a customização de parâmetros relacionados a conexão de publishers e consumers do RabbitMQ feature: permite a customização de parâmetros relacionados a conexão de publishers e consumers do RabbitMQ Jul 30, 2025
Comment thread hijiki/connection/rabbitmq_connection.py
Comment thread hijiki/adapters/rabbitmq_publisher_adapter.py
@ikedawalk
ikedawalk marked this pull request as ready for review July 30, 2025 19:39
Comment thread hijiki/connection/rabbitmq_connection.py
@codecov

codecov Bot commented Jul 31, 2025

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 98.78049% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 95.27%. Comparing base (95a225a) to head (0202660).
⚠️ Report is 14 commits behind head on main.

Files with missing lines Patch % Lines
hijiki/connection/rabbitmq_connection.py 91.66% 1 Missing ⚠️
tests/test_publisher_consumer_test.py 94.11% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #32      +/-   ##
==========================================
+ Coverage   94.42%   95.27%   +0.85%     
==========================================
  Files          22       22              
  Lines         753      889     +136     
==========================================
+ Hits          711      847     +136     
  Misses         42       42              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@asengardeon
asengardeon merged commit 9eb4e16 into asengardeon:main Jul 31, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants