Replies: 3 comments 5 replies
-
Classic mirrored queues are deprecated and will be removed in 4.0. You are likely overestimating how many disk I/O operations your disks can do. Higher disk I/O of quorum queues or classic queues v2 should not matter much for response queues. What is important is whether those queues are very short-lived or long-lived. Very short-lived quorum queues do not make much sense, and their setup (given that they require 3+ replicas) will take dozens or hundreds time longer than the disk I/O parts. So for response queues, a non-replicated classic queue v2 makes more sense, whether they are short-lived or long-lived. But if data safety is more important than response latency and response queues are long-lived (and therefore use known stable names and not server-generated unique ones), quorum queues should be used. Streams do not really fit the request-response model and would not offer any benefits over quorum queues in this particular case, at least the way most users do it with RabbitMQ. |
Beta Was this translation helpful? Give feedback.
-
Thank you for your response, @michaelklishin. I am currently using Spring AMQP and it handles the callback queues (specifically non-replicated exclusive classic queues) which are working fine. However, I am not sure what to choose for the consumer queue. This is a single, long-lived queue where several consumers are connected, and data safety is not a concern for its messages. If I choose transient queues, it may not be able to handle host failures. On the other hand, if I choose Quorum queues, there may be too many unnecessary processes happening - 1-replication, which is not needed since the messages will expire soon, and 2-persistence, which is unnecessary since data safety is not important. Something like to persist the queue metadata on every cluster node with transient messages in it (with no replication). Or still you suggest Quorom queues? |
Beta Was this translation helpful? Give feedback.
-
I think this is a relevant discussion/idea #6376. Please add your comments there: what are the important requirements for you, what is less/not important, what kind of throughput you'd expect to be handled and any other comments you have related to the ideas described. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hello
We offer several services that receive client requests via a REST API. These services make an RPC call through RabbitMQ to another service, and the response time must be prompt.
However, if we use Quorum or mirrored queues, all messages will be persisted, creating high I/O operations on the disks. This persistence is unnecessary because if the client request is not answered promptly, it will time out, and message recovery is not needed.
Using transient queues is an option, but if the host node fails, the queue definition will not survive and also other nodes doesn't have the queue definition, leading to disastrous consequences.
I'm now wondering what kind of queue to use for this use case. Is using RabbitMQ a bad practice, should I switch to other solutions like gRPC?
Thank you.
Beta Was this translation helpful? Give feedback.
All reactions