@Payload() extracts the message data and can accept a ValidationPipe for automatic validation. @Ctx() injects the transport-specific context object — RmqContext for RabbitMQ, KafkaContext for Kafka, TcpContext for TCP. Context objects expose transport metadata like channel references, partition numbers, and message offsets.
TcpContext — getPattern() returns the message pattern object.
RmqContext — getChannelRef() returns the AMQP channel; getMessage() returns the raw message for ack/nack.
KafkaContext — getTopic(), getPartition(), getMessage() with offset and headers.
NatsContext — getHeaders() returns NATS message headers.
@Payload(new ValidationPipe()) validates message data the same way @Body(new ValidationPipe()) validates HTTP bodies.