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:
A 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