I have been learning AMQP using rabbitMQ and I came across this concept called fanout exchanges. From the illustration diagram, all I could see is that it's some kind of load balancer. Could anyone please explain what is it's actual purpose?

Fanout exchanges are basically load balancers right?
1.5k Views Asked by Raja Anbazhagan At
1
There are 1 best solutions below
Related Questions in RABBITMQ
- How to handle RabbitMQ with mobile apps
- Is there a size limit on a RabbitMQ message header?
- ECONNRESET on node.js RabbitMQ consumer in Azure
- How to use RabbitMQ http api to see what queue had a messages in a ready state
- Using same channel for RPC call in RabbitMQ
- Unable to install RabbitMQ using puppet due to curl error
- Spring amqp RPC request to rabbitmq getting timeouts
- Camel rabbitmq + convertSendAndReceive() : Could not convert incoming message with content-type [null]
- How to add initial users when starting a RabbitMQ Docker container?
- Rabbitmq 3.5.1 slow publish rate
- Message Queues: Per Message Guarantees
- RabbitMQ pika error
- Pika with RabbitMQ: Message distribution accross multiple consumer Applications from a single Queue
- Masstransit temporary queue
- spring boot rabbitmq MappingJackson2MessageConverter custom object conversion
Related Questions in AMQP
- ECONNRESET on node.js RabbitMQ consumer in Azure
- Trying to use Java Message Service (JMS) API with Service Bus and AMQP
- RabbitMQ creates a temporary queue but don't know how or when
- Mule AMQP connector fails trying to requeue message
- Spring AMQP 1.3.5 correlation id
- Adding an item in a microservice, with reference to another one
- Embedded AMQP Java Broker
- How many tcp connection created on a queuing protocol such as ZeroMQ
- Multithreading consumption of an ordered queue
- Simple example writing to the Qpid Java broker with Qpid Proton not working
- N-Tier Application Authentication (RabbitMQ as Broker and C# as Business Tier) - WIF possible?
- Best way handle partitioned data with AMQP?
- Camel AMQP transactions issue (with Qpid client)
- Microservices service registry registration and discovery
- spring-amqp not work correctly when connections are blocked
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
I assume that you mean that only one queue will get a message once it arrives to fanout exchange. So from that point of view:
No, I don't think its a load-balancer (I admit that terminology can be confusing).
In Rabbit MQ there are different types of exchanges, its true and fanout exchange is only one type of them. The basic model of Rabbit MQ assumes that you can connect as many queues as you want to the same exchange. Now, all the queues that are connected to the exchange will get the message (Rabbit MQ just replicates the message) - so exchange can't act as a load balancer.
The only difference between the exchange types is an algorithm of matching routing key. It's like a "to" field in a regular envelope. When a message arrives to exchange, it checks the routing key (a.k.a. binding) and depending on type of exchange "finds" to which queue the message should be routed. When queue gets registered to exchange it always uses this binding. It like queue says to the binding "hey, all messages which are supposed to arrive to John Smith (its a routing key), please pass them to me". Then when the message arrives, it always has a "to" field in the envelope - so exchange checks whether the message is intended to be sent to John Smith, and if so - just routes it to the queue.
It's possible that there will be many queues interested to get a message from John Smith, in this case the message will be replicated. As for fanout exchange - it just doesn't pay any attention to the routing key and instead just sends the message to all the connected queues.
Now, there is another abstraction called consumer. Consumers can be connected to the single queue (again, many consumers can be connected to the queue). The trick is that only one consumer can get the message for processing at a time.
So if you want a load balancer - you can use a single queue, connected to your exchange (it can be fanout of course), but then connect many consumers to that queue, and rabbit will send the message to the first consumer (it uses round robin internally to pick the first consumer) - if the consumer can't handle it, the message will be re-queued and rabbit will attempt to send it to another consumer.