# MqttContext

**Kind:** Class

**Source:** [`packages/microservices/ctx-host/mqtt.context.ts`](https://github.com/nestjs/nest/blob/master/packages/microservices/ctx-host/mqtt.context.ts#L8)

**Part of:** [Microservices](subsystem-packages-microservices)

`MqttContext` provides metadata for an incoming MQTT message handled by a NestJS microservice. It exposes the MQTT topic and the raw MQTT packet so message handlers can inspect routing information, QoS, headers, and other transport-level details.

**Extends:** `BaseRpcContext`

## Methods

| Method | Signature | Returns |
|---|---|---|
| `getTopic` | `getTopic()` | `void` |
| `getPacket` | `getPacket()` | `void` |

## Diagram

```mermaid
graph LR
  Client[MQTT Client] --> Broker[MQTT Broker]
  Broker --> Server[NestJS MQTT Server]
  Server --> Handler[Message Handler]
  Server --> Context[MqttContext]
  Context --> Topic[getTopic()]
  Context --> Packet[getPacket()]
  Handler --> Context
```

## Usage

```ts
import { Controller } from '@nestjs/common';
import { Ctx, MessagePattern, MqttContext } from '@nestjs/microservices';

@Controller()
export class DeviceController {
  @MessagePattern('devices/+/status')
  handleStatusUpdate(
    payload: { online: boolean },
    @Ctx() context: MqttContext,
  ) {
    const topic = context.getTopic();
    const packet = context.getPacket();

    console.log(`Received message on topic: ${topic}`);
    console.log(`QoS level: ${packet.qos}`);

    return { received: true, online: payload.online };
  }
}
```

## AI Coding Instructions

- Use `@Ctx() context: MqttContext` in MQTT `@MessagePattern()` handlers when transport metadata is required.
- Call `getTopic()` to inspect the original MQTT topic, especially when using wildcard topic patterns.
- Call `getPacket()` for MQTT-specific metadata such as QoS, retain flags, duplicate delivery status, and packet properties.
- Treat the packet as transport metadata; keep business logic focused on the message payload whenever possible.
- Ensure handlers are configured under a NestJS microservice using the MQTT transport before relying on `MqttContext`.

## Used by

1 reference from 1 file. Each is a place in this repository where the symbol is actually used — go read one rather than trusting an example.

### Imported by (1)

- `MqttController` — `integration/microservices/src/mqtt/mqtt.controller.ts`:16
