---
schema_version: "1"
id: cd59ea27b4728977ac5fffce4bc2df3f731d59ce5b7e7fbba54dcd57f11aedcc
title: Consume Messages with the JMS Connector
collection: mulesoft
version: current
locale: en-us
portal_url: https://docs.salesforce.com/mulesoft/current/en-us/jms-connector/1.10/jms-consume.md
canonical_url: https://docs.mulesoft.com/jms-connector/1.10/jms-consume
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 0acfcc5ab1925fa455f4881cc3cbdb4c705682a29200bf449502157ca7351a1f
description: MuleSoft Documentation Site
release: "1.10"
latest: false
---
---
product: JMS Connector
version: 1.10
keywords: jms, connector, consume, message
---

# Consume Messages with the JMS Connector

> For the full documentation index, see: https://docs.mulesoft.com/llms.txt

Anypoint Connector for JMS (JMS Connector) **Consume** operation enables you to consume a message at
any time in the flow, from any given specified destination.

## Consume a Message from a Queue

In the following example, you configure the **Consume** operation to consume new messages in the
queue specified in the **Destination** field. The operation returns a Mule message each time a JMS
message is available in the queue. The Mule message consists of:

- The message content as payload

- The message metadata in the message attributes

The metadata has three parts that map all the information available in a JMS message:

- AckId

- Headers

- Properties

By default, the message consumed is acknowledged ("ACKed") only when the execution of the flow
receiving the message completes successfully. If you want to control the ACK of the message after
some processing, configure the `ackMode` to `MANUAL`. For more information regarding a Message ACK,
review the [Manage Message Acknowledgement](https://docs.mulesoft.com/jms-connector/1.10/jms-ack) documentation.

To configure the source in Studio, follow these steps:

1.  In the **Mule Palette** view, select **JMS > Consume**.

2.  Drag **Consume** to the Studio canvas.

3.  In the **Consume** configuration screen, optionally change the value of the **Display Name**
    field.

4.  In the **Consume** configuration screen, in **Destination**, specify the name of the destination
    from which to consume the message, for example, `#[vars.destination]`.

![In the Consume operation screen](/mulesoft/current/en-us/jms-connector/1.10/_images/jms-consume-queue.png)

Figure 1. JMS Connector Consume configuration

In the XML editor, the `<jms:consume>` configuration looks like this:

```xml
<jms:consume config-ref="JMS_config" destination="#[vars.destination]"/>
```

## Consume a Message from a Topic Subscription

In the following example, you configure the **Consume** operation to consume new messages from a
topic subscription by setting the **Consumer type** field to **Topic consumer**.

To configure the source in Studio, follow these steps:

1.  In the **Mule Palette** view, select **JMS > Consume**.

2.  Drag **Consume** to the Studio canvas.

3.  In the **Consume** configuration screen, optionally change the value of the **Display Name**
    field.

4.  In the **Consume** configuration screen, in **Destination**, specify the name of the destination
    from which to consume the message for example `#[vars.destination]`.

5.  Set the **Consumer type** field to **Topic consumer**:

![In the Consume operation screen](/mulesoft/current/en-us/jms-connector/1.10/_images/jms-consume-topic.png)

Figure 2. JMS Connector Consume on Topic subscription configuration

In the XML editor, the `<jms:consume>` and `<jms:topic-consumer/>` configuration looks like this:

```xml
<jms:consume config-ref="JMS_config" destination="#[vars.destination]">
    <jms:consumer-type>
        <jms:topic-consumer/>
    </jms:consumer-type>
</jms:consume>
```

## Wait for a Message

By default, the **Consume** operation waits for a message for up to 10000 milliseconds, after which
you receive the error `JMS:TIMEOUT`. To better suit your use case, configure the **Maximum wait**
and **Maximum wait unit** fields. To wait indefinitely for a message to arrive, set the **Maximum
wait** field to `-1`, which prevents a `JMS:TIMEOUT` error.

## Poll for a Message

When polling for a message with a certain frequency, you don’t want the consumer to block waiting
for the message, but instead just try to consume it if one is present. In this case, set the
**Maximum wait** field to `0`, which indicates that no waiting occurs, and neither an error is
thrown if no message is available in the specified destination. The output of the **Consume**
operation is `null` when no message is present for consumption and no error is thrown.

## Filter Incoming Messages

JMS Connector supports filtering messages to consume based on the standard JMS selector language you
specify in the **Selector** field of the **Consume** operation. By doing so, you receive only the
messages matching the selector language, ignoring any other messages in the destination.

In the following example, you configure a priority queue that processes messages faster than others
queues:

1.  In Studio, select the **Consume** operation from your flow.

2.  Set the **Destination** field to `openTickets`.

3.  Set the **Selector** field to `JMSPriority=8`:

JMS Connector On New Message Filtering messages image::jms-consume-selector.png\[In the Consume
operation screen, set the Selector field to filter incoming messages\]

In the XML editor, the `selector` configuration looks like this:

```xml
<jms:consume config-ref="JMS_config" destination="openTickets" selector="JMSPriority=8"/>
```

## Configure Mime Types and Encoding

JMS Connector determines a message’s mime type (`contentType`) based on the
`MM_MESSAGE_CONTENT_TYPE` property. However, when you must manage the message’s content, configure
the **Content-Type** field to the particular content type value you need.

By default, JMS Connector assumes that Mule runtime engine default encoding matches the encoding in
the message if no other information is provided. Use the **Encoding** field to configure a different
type of encoding.

In the following example, you configure the content-type and encoding:

1.  In Studio, select the **Consume** operation from your flow.

2.  Set the **Content-Type** field to `application/JSON`.

3.  Set the **Encoding** field to `UTF-8`.

![In the Consume operation screen](/mulesoft/current/en-us/jms-connector/1.10/_images/jms-consume-types-encoding.png)

Figure 3. JMS Connector Consume Content-Type and Encoding

In the XML editor, the `contentType` and `encoding` configuration looks like this:

```xml
	<jms:consume  destination="#[vars.destination]" contentType="application/JSON" encoding="UTF-8"/>
```

## See Also

- [Configure Topic Subscriptions](https://docs.mulesoft.com/jms-connector/1.10/jms-topic-subscription)

- [Listen For New Messages](https://docs.mulesoft.com/jms-connector/1.10/jms-listener)

- [Troubleshoot Prefetch Issues](https://docs.mulesoft.com/jms-connector/1.10/jms-troubleshooting#prefetch-issues)
