---
title: Message queues
source: https://docs.newrelic.com/docs/apm/agents/nodejs-agent/extend-your-instrumentation/message-queues
---

The New Relic Node.js agent supports the [amqplib RabbitMQ client library](https://www.npmjs.com/package/amqplib), giving you insight into the performance of your message processing, for both incoming and outgoing messages.

The APM UI will show transactions initiated via RabbitMQ message receipt (subscribe/consume messages) as **Message** background tasks. Message creation via RabbitMQ also appears in transaction traces.

This feature requires New Relic [Node.js agent version 2.0.0 or higher](https://docs.newrelic.com/docs/release-notes/agent-release-notes/nodejs-release-notes).

## Performance improvements with background tasks [#background]

One way to increase responsiveness of web applications is to delegate work to background processes. Message queues are commonly used for this inter-process communication.

In the context of message queuing systems, applications typically interact with message brokers to send and receive messages. The `amqplib` client library allows Node.js applications to interface with message brokers that implement the Advanced Message Queueing Protocol (AMQP) 0.9 or higher.

New Relic's Node.js agent shows messages sent and received using the RabbitMQ client library. With this visibility, you can see details including:

-   Number of messages produced by your app
-   Time your app spends publishing messages
-   Time your app spends processing "consumed" messages

[APM](#view-queue) conveniently groups and reports operations that interact with queues. By analyzing this information, you can more easily identify bottlenecks and areas for performance improvement in your message passing architecture.

## Queue operations [#queue-ops]

Supported entry points for queue operations appear as `Put` (publish a message) or `Take` (receive a message) in APM's user interface.

| **Queue operations** | **Publish a message (`Put` in UI)** | **Receive a message (`Take` in UI)** |
| -------------------- | ----------------------------------- | ------------------------------------ |
| RabbitMQ             | `publish` `sendToQueue`             | `get` `consume`                      |

## View in New Relic UI [#view-queue]

Queue operations appear on APM's [**Transactions** page](https://docs.newrelic.com/docs/apm/applications-menu/monitoring/transactions-dashboard) for the selected app. The `Put` and `Take` metrics appear in the **Breakdown table** and are categorized as `MessageBroker` metrics. Here is an example:

![metric-breakdown-table](https://docs.newrelic.com/images/apm_screenshot-crop_messaging-breakdown-table.webp "metric-breakdown-table")

**[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > APM & services > Applications > (select an app) > Transactions > (select a transaction):** The transaction's **Breakdown table** categorizes queue operations as `MessageBroker` metrics and labels them as `Put` (publish a message) or `Take` (receive a message).

The [**Transaction trace summary** page](https://docs.newrelic.com/docs/apm/transactions/transaction-traces/transaction-traces-trace-details-page) may show `Put` and `Take` operations in the **Slowest components** section. For example:

![slow-message-component](https://docs.newrelic.com/images/apm_screenshot-crop_trx-slowest-components.webp "slow-message-component")

**[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > APM & services > Applications > (select an app) > Summary > (select a transaction trace):** In this example, the selected transaction trace's **Summary** shows RabbitMQ operations in the colored bar chart. The **Slowest components** section also lists the RabbitMQ `Put` and `Take` results.

The [**Transaction trace** page](https://docs.newrelic.com/docs/apm/transactions/transaction-traces/transaction-traces) also includes a dedicated **Messages** tab that shows a summary of the message activity that occurred as part of the transaction.

> #### 💡 TIP
>
> You can [select transaction traces](https://docs.newrelic.com/docs/apm/transactions/transaction-traces/viewing-transaction-traces) from the app's **Summary** or **Transactions** pages in **APM**.
