# Duplicate Message Delivery in MQTT Clients

When a client subscribes to multiple topics that can match the same published message (e.g., using wildcards), CybusMQ can be configured to either:

* **Send a single message** (deduplication enabled, default behavior)
* **Send multiple messages** (deduplication disabled)

**Use Cases**

* **Enabled deduplication**: Ensures that each client processes a message only once, regardless of subscription patterns.
* **Disabled deduplication**: When your application specifically requires receiving multiple copies of messages for overlapping subscriptions, such as certain protocol-mapping scenarios.

**Example**

A client subscribes to `+/bar` and `foo/bar`:

* The wildcard subscription `+/bar` matches any topic with a single-level prefix followed by `/bar`.
* The specific subscription `foo/bar` matches only the exact topic `foo/bar`.

When a message is published to `foo/bar`, both subscriptions match this topic.

* With deduplication enabled:

{% code lineNumbers="true" %}

```yaml
Client receives: 1 message
{
  "topic": "foo/bar",
  "payload": "Hello World"
}
```

{% endcode %}

* With deduplication disabled:

{% code lineNumbers="true" %}

```yaml
Client receives: 2 messages
{
  "topic": "foo/bar",  // From first subscription match
  "payload": "Hello World"
}
{
  "topic": "foo/bar",  // From second subscription match
  "payload": "Hello World"
}
```

{% endcode %}

## Enabling/Disabling Deduplication

By default, CybusMQ deduplicates messages for overlapping subscriptions. This means a client will receive only one copy of a message even if multiple subscriptions match the published topic.

To allow clients to receive multiple copies of the same message when they have overlapping subscriptions, you can disable deduplication.

{% tabs %}
{% tab title="Kubernetes" %}

### Enabling/Disabling Deduplication on Kubernetes

**Prerequisite**

* Your Helm chart is version 1.5.0 or later.

**Procedure**

1. Open your `values.yaml` file.
2. Set the `DOCKER_VERNEMQ_DEDUPLICATE_OVERLAPPING_SUBS` to `on` (enable) or `off` (disable).

{% code lineNumbers="true" %}

```yaml
global:
  broker:
    env:
      - name: DOCKER_VERNEMQ_DEDUPLICATE_OVERLAPPING_SUBS
        value: on # Set to "off" to disable deduplication
```

{% endcode %}
{% endtab %}

{% tab title="Docker" %}

### Enabling/Disabling Deduplication on Docker

1. Create or modify a `docker-compose.override.yml` file.
2. In the `docker-compose.override.yml` file, set `DOCKER_VERNEMQ_DEDUPLICATE_OVERLAPPING_SUBS` to `on` (enable) or `off` (disable).

{% code lineNumbers="true" %}

```yaml
services:
  broker:
    environment:
      DOCKER_VERNEMQ_DEDUPLICATE_OVERLAPPING_SUBS: on # Set to "off" to disable deduplication
```

{% endcode %}
{% endtab %}
{% endtabs %}
