Inclusão do parâmetro frame_max para compatibilidade com RabbitMQ 4.1+#1498
Inclusão do parâmetro frame_max para compatibilidade com RabbitMQ 4.1+#1498DavidsonGomes merged 1 commit intoEvolutionAPI:developfrom
Conversation
Reviewer's GuideIntroduces explicit support for the RabbitMQ frame_max parameter (defaulting to 8192) by exposing it in the configuration, updating environment examples, and supplying it in the connection options to maintain compatibility with RabbitMQ 3.11+. Sequence Diagram: RabbitMQ Connection with
|
| Change | Details | Files |
|---|---|---|
| Pass frame_max in AMQP connection options |
|
src/api/integrations/event/rabbitmq/rabbitmq.controller.ts |
| Expose FRAME_MAX in application configuration |
|
src/config/env.config.ts.env.example |
Tips and commands
Interacting with Sourcery
- Trigger a new review: Comment
@sourcery-ai reviewon the pull request. - Continue discussions: Reply directly to Sourcery's review comments.
- Generate a GitHub issue from a review comment: Ask Sourcery to create an
issue from a review comment by replying to it. You can also reply to a
review comment with@sourcery-ai issueto create an issue from it. - Generate a pull request title: Write
@sourcery-aianywhere in the pull
request title to generate a title at any time. You can also comment
@sourcery-ai titleon the pull request to (re-)generate the title at any time. - Generate a pull request summary: Write
@sourcery-ai summaryanywhere in
the pull request body to generate a PR summary at any time exactly where you
want it. You can also comment@sourcery-ai summaryon the pull request to
(re-)generate the summary at any time. - Generate reviewer's guide: Comment
@sourcery-ai guideon the pull
request to (re-)generate the reviewer's guide at any time. - Resolve all Sourcery comments: Comment
@sourcery-ai resolveon the
pull request to resolve all Sourcery comments. Useful if you've already
addressed all the comments and don't want to see them anymore. - Dismiss all Sourcery reviews: Comment
@sourcery-ai dismisson the pull
request to dismiss all existing Sourcery reviews. Especially useful if you
want to start fresh with a new review - don't forget to comment
@sourcery-ai reviewto trigger a new review!
Customizing Your Experience
Access your dashboard to:
- Enable or disable review features such as the Sourcery-generated pull request
summary, the reviewer's guide, and others. - Change the review language.
- Add, remove or edit custom review instructions.
- Adjust other review settings.
Getting Help
- Contact our support team for questions or feedback.
- Visit our documentation for detailed guides and information.
- Keep in touch with the Sourcery team by following us on X/Twitter, LinkedIn or GitHub.
There was a problem hiding this comment.
Hey @thrsouza - I've reviewed your changes - here's some feedback:
- Instead of manually parsing the URI with new URL and rebuilding connectionOptions, you can call amqp.connect(uri, { frameMax }, callback) to let the library handle URI parsing (so you don’t accidentally drop other query params).
- You’re calling configService.get('RABBITMQ') multiple times—consider destructuring the Rabbitmq config once at the top of the promise to reduce repetition and improve readability.
Here's what I looked at during the review
- 🟡 General issues: 3 issues found
- 🟢 Security: all looks good
- 🟢 Testing: all looks good
- 🟢 Documentation: all looks good
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
| const rabbitmqExchangeName = configService.get<Rabbitmq>('RABBITMQ').EXCHANGE_NAME; | ||
|
|
||
| amqp.connect(uri, (error, connection) => { | ||
| const url = new URL(uri); |
There was a problem hiding this comment.
suggestion (bug_risk): Parsing the URI with new URL may throw on invalid URIs
Consider adding a try/catch around new URL(uri) or validating the URI beforehand to prevent unhandled exceptions from malformed input.
| const connectionOptions = { | ||
| protocol: url.protocol.slice(0, -1), | ||
| hostname: url.hostname, | ||
| port: url.port || 5672, |
There was a problem hiding this comment.
suggestion (bug_risk): Convert url.port to a number and adjust default port per protocol
url.port is a string, and the default port should be 5671 for amqps. Use port: url.port ? Number(url.port) : (url.protocol === 'amqps:' ? 5671 : 5672) to set the correct type and default value.
| port: url.port || 5672, | |
| port: url.port ? Number(url.port) : (url.protocol === 'amqps:' ? 5671 : 5672), |
| port: url.port || 5672, | ||
| username: url.username || 'guest', | ||
| password: url.password || 'guest', | ||
| vhost: url.pathname.slice(1) || '/', |
There was a problem hiding this comment.
suggestion (bug_risk): Decode percent-encoded vhost names
Wrap url.pathname.slice(1) with decodeURIComponent() to ensure special characters in vhost names are properly decoded.
| vhost: url.pathname.slice(1) || '/', | |
| vhost: decodeURIComponent(url.pathname.slice(1)) || '/', |
Updates the minimum frame_max value from 4096 to 8192 to meet the requirements of RabbitMQ 4.1+ servers. This resolves connection failures with newer RabbitMQ versions while maintaining backwards compatibility with older versions.
Descrição
Este pull request atualiza a configuração da integração com o RabbitMQ para garantir compatibilidade com as versões mais recentes (4.1+).
A partir do RabbitMQ 4.1, o valor mínimo para o parâmetro
frame_maxfoi aumentado de 4096 (4KB) para 8192 (8KB). Estávamos utilizando o valor padrão anterior de 4096, o que causava falhas de conexão com versões mais recentes do RabbitMQ.Mudanças Implementadas
RABBITMQ_FRAME_MAXframe_maxna criação da conexão com o RabbitMQProblema Resolvido
Antes desta alteração, ao tentar se conectar com servidores RabbitMQ 4.1+, a aplicação apresentava o seguinte erro nos logs:
Esta modificação resolve o problema de compatibilidade, permitindo que a aplicação se conecte corretamente com servidores RabbitMQ nas versões mais recentes.
Logs Comparativos
Antes da alteração:
Após a alteração:
Impacto
Esta alteração é necessária para manter a compatibilidade com as versões mais recentes do RabbitMQ e não deve causar impacto negativo em instalações existentes que utilizam RabbitMQ 4.1 ou anterior, pois o valor de 8192 é compatível com versões anteriores.
Summary by Sourcery
Ensure RabbitMQ connections negotiate a minimum frame_max of 8192 for compatibility with RabbitMQ 4.1+.
Bug Fixes:
Enhancements:
Documentation: