Sunday, July 17, 2022

Rabbitmq Interview Questions


Q: What is RabbitMQ?
Ans:

RabbitMQ is an open-source message-broker software is also known as message queueing technology. It defines queues to which applications communicate for data transfer, or message transmission. Any kind of information could be included in a message. This message is processed by the recipient application.


Q: How RabbitMQ works, and it's Standard message flow?
Ans:

An exchange must accept messages from the supplier request and route them to message queues using header attributes, bindings and routing keys. A binding is set up to connect the queue to an exchange.



As shown above in screen shot, below are the Standard message flow.
1) The producer publishes a message to an exchange. When you create the exchange, you have to specify the type of it. The different types of exchanges are explained in detail later on.
2) The exchange receives the message and is now responsible for the routing of the message. The exchange takes different message attributes into account, such as routing key, depending on the exchange type.
3) Bindings have to be created from the exchange to queues. In this case, we see two bindings to two different queues from the exchange. The Exchange routes the message into the queues depending on message attributes.
4) The messages stay in the queue until they are handled by a consumer
5) The consumer handles the message.

 

Q: When and why to use RabbitMQ?
Ans:

Message queueing is useful when you want to exchange a message for consumption or for balance of loads between workers with multiple recipients. The user is able to take a message from the queue while the producer is in the queue, and start processing. The consumer can be on a different server or on the same server than the publisher. The requested application can be of one language and the consumer application is of other language - the message broker would not care about the application languages, it just send messages between consumer and reciever. Which also reduces the dependencies or coupling between the application.

Q: What Is binding And routing Key?
Ans:

A binding is a "bridge" that you set up to connect a queue to an exchange.
The routing key is an attribute message that the exchange examines when determining how to route the message to queues.

Q: What is a RabbitMQ channel?
Ans:

They enable you to have a single connection to the RabbiMQ server, but for different parts of your application they have sandboxed communication. Channels are how the RabbitMQ server communicates with your application. It hold one connection (instance) per client process and many channels in that process (instance)


Q: What is a dead letter queue in rabbitmq?
Ans:

In general, a death letter queue (DLQ), also referred to as an undelivered-message queue, is a holding queue of messages that can not be sent to their destinations for some reason.
In rabbitmq, the dead letter queue is service implementation to store messages that satisfy one or more of the following failure criteria.

  • Message that is sent to a queue that does not exist.
  • Queue length limit exceeded.
  • Message length limit exceeded.
  • Message is rejected by another queue exchange.
  • Message reaches a threshold read counter number, because it is not consumed. Sometimes this is called a "back out queue".



Q: How to implement RabbitMQ retry mechanism?
Ans:

Whenever any data in the message is transmitted that the receiver does not accept, or when a message is sent to a queue that does not exist. The message is retried and sent up to a set number of times. Even if the communication is not received by the recipient but is sent from the sender's end. Now In such instances, the message queue is marked as undeliverable or deadLetter queue.

            RabbitMQ provides a method for handling message failures in a really 

            efficient way known as the Retry and Error Handling feature.

Refer Spring Boot + RabbitMQ + Retry Error Handling Example

Q: How to install and configure RabbitMQ at local?
Ans:

Refer Setup RabbitMQ at Local
OR
Refer Install RabbitMQ using Docker




Q: What is Exchange?
Ans:

Messages are not posted directly in the queue; rather, the user sends messages to the exchange. An exchange is responsible for routing the messages to the various queues. An exchange receives messages from the producer request and routes them by bindings and routing keys to message queues. A binding is a linkage between an exchange and a queue.

 

Q: Types of Exchange?
Ans:















Direct: Direct exchange transfers messages to queues on the basis of a message routing key. The message is routed in a direct exchange to the queues whose binding key exactly matches the message's routing key. If the queue is bound to the binding key exchange, a message will be sent to the exchange with a routing key to the queue.
Fanout: A fanout sends messages to all the queues linked to it.
Topic: The topic exchange matches the wildcard between the routing key and the binding routing pattern.
Headers: Headers exchanges use the routing attributes of the message header.


Q: Which Protocol RabbitMQ uses?
Ans:

RabbitMQ uses Advanced Message Queuing Protocol (AMQP). Its an open standard layer used to communicates date across network by means of byte stream.

Q: What is RabbitMQ Vhost?
Ans:

Virtual Host (a.k.a. ' vhost ') in AMQP is a namespace for objects such as Exchanges, Queues and Bindings. RabbitMQ utilizes more concrete implementation of virtual hosts, through effectively making them "virtual clusters" on top of the broker.


Q: How RabbitMQ differs from ActiveMQ?
Ans:

RabbitMQ is open source message broker with support for several protocols, written in Erlang. Whereas ActiveMQ is also open source with support for several protocols, written in Java langauge.


Q: Is RabbitMQ support MQTT (Message Queue Telemetry Transport)?
Ans:

RabbitMQ supports MQTT 3.1.1 through a plugin that ships to the core distribution.
Supported MQTT Features:

  • QoS0 and QoS1 publish & consume
  • QoS2 publish (downgraded to QoS1)
  • TLS
  • Session stickiness
  • Retained messages with pluggable storage backends
  • Last Will and Testament (LWT)
Q: Is RabbitMQ persistent?
Ans:

Having a queue durable is not same as making persistent messages. Messages can be distributed either with making mode to persistent or transient. When you post your message, you need to set the delivery mode to persistent if you want it to remain in your long-lasting queue during restart.


Q: Is RabbitMQ uses database?
Ans:

RabbitMQ intentionally does not store messages in a database. RabbitMQ writes messages to disk in below two ways:

  • Messages published in delivery_mode=2
  • Memory pressure causes RabbitMQ to run out of RAM and transfers messages to the disk to free up RAM.
Q: Does RabbitMQ is PUSH or PULL?
Ans:

RabbitMQ uses a PUSH template and prevents exhausting consumers through the prefetch configured limit. PULL is used by Kafka, where consumers request for messages from a particular offset batches.


Q: What is Dead Letter Exchange in Rabbitmq?
Ans:

If there is no appropriate queue for the message, the message will be dropped quietly. RabbitMQ offers an AMQP extension known as the "Dead Letter Exchange". The dead letter exchange provides features for collecting non-deliverable messages.


Q: What is pub sub, how it works?
Ans:

pub/sub messaging is a asynchronous service-to-service communication, it's a two way communication.
Mainly used in statelss, microservices. In this type of model, once message published to a topic, it gets received immediately by all subscriber to the topic.


Q: Is RabbitMQ an ESB?
Ans:

RabbitMQ is a messaging broker, whereas Mule is an ESB (Enterprise Service Bus). An ESB includes additional layers on top of a message broker like routing, transformations and business process management


Q: Which design patterns RabbitMQ uses.
Ans:

As a strong messaging model transmitting messages among endpoints in the communication channel has many features / uses. It uses asynchronous architectural patterns to decouple applications.


Q: How to monitor rabbitMQ queue.
Ans:

Monitoring is a process of capturing behaviour of your application using health checks and metrics.
There are many tools available to monitors the application like AppDynamics,DataDog,AWS CloudWatch etc.


Q: What is Synchronous and Asychronous messaging.
Ans:

Synchronous messaging is a two way communication, where sender sends a message to receiver and receiver receives message and gives reply to the sender. Where as Asynchronous Messaging is a communication where a message is placed in a message queue and does not require an immediate response from receiver.


Q: Which Messaging patterns are getting used in RabbitMq?
Ans:

Messaging patterns are implemented in RabbitMQ on the basis of exchanges queues and bindings. We may distinguish between the different approaches to implementing a RabbitMQ design pattern: point-to-point communication publish-subscribe request-response communication

 

Q: What is Point to Point Communication?
Ans:

Point-to-point connection is a communications connection between two communication endpoints/nodes.


Q: How RabbitMQ differs from Kafka?
Ans:

RabbitMQ is a lightweight message broker used to communicates messages between consumer and producer and it supports many protocols like AMQP, MQTT,STOMP. Whereas Kafka manages large amounts of data with very little overhead-Kafka was designed for large volumes of messages to be stored and distributed.
Refer Apache Kafka Tutorial to understand Kafka with example.


Q: What is Pub Sub Communication?
Ans:

Pub / sub messaging is a two-way communication between asynchronous user and service., mainly used in stateless microservices.


Q: What is Request-Response communication?
Ans:

Request–Response, or Request–Reply,is strong messaging patterns where requester send message to a replier, and in return replier send response back to replier.


Q: What is Erlang RabbitMQ?
Ans:

The RabbitMQ server software is written in the programming language of Erlang and is based on the clustering and failover architecture of the Open Telecom Framework.

 

Q: Is RabbitMQ support message priority queues?
Ans:

To make the queue function as a priority queue, provide an x-max-priority property when the queue is established.
x-max-priority declares the maximum priority number in the queue.
In JavAns: Set priority as given below:

Map<String, Object> queuePriorityProp = new HashMap<>();
queuePriorityProp.put("x-max-priority", 10); // max priority is 10
channel.queueDeclare(QUEUE_NAME, durable, false, false, queuePriorityProp);

Publish messages of a particular priority,

String queueNote = "Set note priority 8";
AMQP.BasicProperties.Builder queueProps = new AMQP.BasicProperties.Builder();
queueProps.contentType("text/plain")
            .priority(8);
channel.basicPublish("", QUEUE_NAME, queueProps.build(), queueNote.getBytes());

 


No comments:

Post a Comment