Skip to content

INT-175 RabbitMQ Message Splitting#7

Open
DmitryDodzin wants to merge 10 commits intometalbear-co:mainfrom
DmitryDodzin:dimad/int-175-rabbitmq-splitting
Open

INT-175 RabbitMQ Message Splitting#7
DmitryDodzin wants to merge 10 commits intometalbear-co:mainfrom
DmitryDodzin:dimad/int-175-rabbitmq-splitting

Conversation

@DmitryDodzin
Copy link
Copy Markdown
Member

Queue splitting is pretty neat so it would be nice to do so on RabbitMQ too

Comment thread text/0002-rabbitmq.md
Comment on lines +99 to +100
## Guide-level explanation
[guide-level-explanation]: #guide-level-explanation
Copy link
Copy Markdown
Collaborator

@0x00A5 0x00A5 Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should these be Reference-level?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤷🏻‍♂️

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because on line 18 there is already a guide level subtitle

Comment thread text/0002-rabbitmq.md Outdated
Comment thread text/0002-rabbitmq.md
Comment thread text/0002-rabbitmq.md Outdated
@t4lz t4lz requested review from a team and vladrbg and removed request for a team February 16, 2026 09:42
Co-authored-by: Yuan Lyu <lyuyuan92@gmail.com>
Comment thread text/0002-rabbitmq.md Outdated
name: cluster-definition-name-with-credenitals
spec:
clientProperties: {}
connectionString: amqp://guest:guest@rabbit:5672/%2F
Copy link
Copy Markdown
Contributor

@vladrbg vladrbg Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe will be better to store all the sensitive data in secrets instead of CR? Also if this CR is only for config purposes, maybe the non-sensitive data can be stored in configmap also and we won't need this CR at all?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree we probably need a solution that does not require keeping auth secrets directly in a CRD.

Comment thread text/0002-rabbitmq.md Outdated
Comment thread text/0002-rabbitmq.md Outdated
Comment thread text/0002-rabbitmq.md Outdated
Comment thread text/0002-rabbitmq.md Outdated
Comment thread text/0002-rabbitmq.md Outdated
Comment thread text/0002-rabbitmq.md
One main impact on the cluster itself will be a performance one, since we are moving messages through the external api we are subject to multiple "transactions" we create where we want to guarantee delivery, and the replication that can happen if the queues are defined as highly available.

## Rationale and alternatives
[rationale-and-alternatives]: #rationale-and-alternatives
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I remember we considered rabbitMQ plugin? why did it fall? I think it'd be worth mentioning.
Did we consider re-configuring the exchange and use the filtering nature of it?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The main problem with custom plugins is the involvement required in setting it up, I think the easiest way would be to provide custom images with the plugin already installed (and have several variants and versions like the real one)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree but that's what this section in the RFC for - to specify what we thought and said ney to

@t4lz t4lz self-requested a review February 23, 2026 11:42
Comment thread text/0002-rabbitmq.md Outdated
Comment thread text/0002-rabbitmq.md Outdated
name: cluster-definition-name-with-credenitals
spec:
clientProperties: {}
connectionString: amqp://guest:guest@rabbit:5672/%2F
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree we probably need a solution that does not require keeping auth secrets directly in a CRD.

Comment thread text/0002-rabbitmq.md Outdated
Comment thread text/0002-rabbitmq.md

In this graphic the idea is that some Publisher is aware of the existence of the Input Exchange only where as the Target knows of the Input Exchange and the Target Queue, as rabbit by default works on "get or create" method where when one of the Target Pods starts it may create the Target Queue and then also bind it to the Input Exchange (or maybe also create it if it's not done with Publisher beforehand)

There is more to it some patterns are more like RPC requests where the Publisher embeds the reply_to argument (it can be done in many ways just the reply_to is the rabbit provided way) and then is expected by the target pod to send the reply to provided queue.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

...and then is expected by the target pod to send the reply to provided queue

Queue, not exchange?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure but it just worked when I tested it

Comment thread text/0002-rabbitmq.md
└────────────────┘ └────────────────┘
```

### "Shovel"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why a new name? We're using "forwarder" for both SQS and Kafka

Comment thread text/0002-rabbitmq.md
Comment thread text/0002-rabbitmq.md Outdated
Comment on lines +158 to +164
status:
activeRmqSplits:
queueNames:
first-queue:
exchangeName: my-prefix2-dummy-exchange
originalName: target-queue
outputName: my-prefix-mirrord-sink-my-suffix
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Queue registry status should no longer be used. It's a public CRD, and can be modified/deleted by the admin

Comment thread text/0002-rabbitmq.md

### MirrordRabbitMQSession

The main purpose of the rabbitmq session is to create and handle the lifespan of created queues and the state of their creation so the operator can assertively define the state. I want to store all needed data for the split in the session since I want to avoid management api and only use the declarative AMQP api only.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have a new thingy for tracking external resources - MirrordClusterExternalResource.

The lifetime of the tmp resources should be bound to:

  1. Lifetime of the session, if the queue is for the user. This ensures that the queue is not deleted before the session is closed
  2. Lifetime of the MirrordClusterWorkloadPatchRequest resource, if the queue is for the patched target. This ensures that the queue is not deleted while there are patched pods

Comment thread text/0002-rabbitmq.md
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reminder to rename the file to next available RFC number before merging

Co-authored-by: t4lz <t4lz.git@gmail.com>
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.

6 participants