Skip to content

By @dcorbacho and me: introduce [cluster-]local shovels, adopt message containers for shovels #14256

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 14 commits into
base: main
Choose a base branch
from

Conversation

michaelklishin
Copy link
Collaborator

This introduces several changes for shovels for 4.2.0:

  • Cross-protocol message translation is now done using the mc module
  • A new "local" shovel type ("protocol") that uses the internal API (namely rabbit_queue_type) and the AMQP 1.0-inspired consumer and publisher side implementations that avoid using an AMQP 1.0 or AMQP 0-9-1 Erlang client
  • AMQP 1.0 shovel no longer mutates messages where it should not do so

Cluster-Local Shovel Type

This PR introduces a new shovel "protocol": local. Instead of using an AMQP 1.0 or AMQP 0-9-1 Erlang client for consuming and re-publishing the messages, this shovel implementation
uses various internal API modules, namely rabbit_queue_type, and can skip network serialization and cross-protocol message conversion.

For this reason, this shovel protocol can only be used to with a source or destination in the same cluster. However, the other part of shovel can still use AMQP 1.0 or AMQP 0-9-1.

A shovel can use the local protocol on both sides within the same cluster.

Message Containers for Message Translation

This is self-explanatory: adopt the mc module.

AMQP 1.0 Message Immutability: a Potentially Breaking Change

AMQP 1.0 shovels modified message application property, even though it arguably should not.

Instead, we modify message annotations. This is a potentially breaking change: a number of metadata fields have been renamed.

  • shovelled-by => x-opt-shovelled-by
  • shovel-type => x-opt-shovel-type
  • shovel-name => x-opt-shovel-name

@michaelklishin michaelklishin added this to the 4.2.0 milestone Jul 21, 2025
@michaelklishin michaelklishin marked this pull request as draft July 21, 2025 15:57
dcorbacho and others added 14 commits July 22, 2025 09:00
This implementation intentionally ignores the
drain property of AMQP 1.0 flow control because
local shovels does not use this feature, and no
external component can "enable" it, so we can
simply ignore it.

Pair: @dcorbacho.

Co-authored-by: Diana Parra Corbacho <diana.parra-corbacho@broadcom.com>
Co-authored-by: Michael Klishin <michaelklishin@icloud.com>
Fixes a dialyzer failure
CI uses a different hostname
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.

3 participants
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy