Skip to content

ListenerMetadataExplorer

reference
1 min readUpdated

Kind: Class

Source: packages/microservices/listener-metadata-explorer.ts

Part of: Microservices

ListenerMetadataExplorer discovers microservice listener metadata declared on controller methods, including message patterns and event handlers. It scans controller prototypes, converts decorator metadata into listener definitions, and identifies client hooks used by the microservices runtime during server setup.

Methods

MethodSignatureReturns
exploreexplore(instance: Controller)EventOrMessageListenerDefinition[]
exploreMethodMetadataexploreMethodMetadata(instance: Controller, instancePrototype: object, methodKey: string)`EventOrMessageListenerDefinition
scanForClientHooksscanForClientHooks(instance: Controller)IterableIterator<ClientProperties>

Where it refuses work

  • ListenerMetadataExplorer stops the work with an early return when isUndefined(handlerType).

Diagram

mermaid
graph LR
  Controller[Controller instance] --> Explorer[ListenerMetadataExplorer]
  Explorer --> Scanner[MetadataScanner]
  Explorer --> Reflector[Reflector]
  Scanner --> Methods[Controller methods]
  Reflector --> Metadata[Pattern and client metadata]
  Metadata --> Definitions[EventOrMessageListenerDefinition[]]
  Definitions --> Server[Microservice server bindings]

Usage

ts
import { Controller } from '@nestjs/common';
import { EventPattern, MessagePattern } from '@nestjs/microservices';

// ListenerMetadataExplorer is typically used internally by Nest's
// microservices infrastructure rather than instantiated in application code.
@Controller()
class OrdersController {
  @MessagePattern('orders.find')
  findOrder(data: { id: string }) {
    return { id: data.id, status: 'pending' };
  }

  @EventPattern('orders.created')
  handleOrderCreated(data: { id: string }) {
    console.log(`Order created: ${data.id}`);
  }
}

// During microservice initialization, Nest:
// 1. Scans OrdersController methods.
// 2. Reads @MessagePattern() and @EventPattern() metadata.
// 3. Produces listener definitions.
// 4. Registers handlers with the configured transport.

AI Coding Instructions

  • Preserve metadata-driven discovery: listener definitions must be derived from method decorator metadata rather than manually inferred from method names.
  • Use the framework MetadataScanner and Reflector utilities when scanning controller prototypes; avoid scanning only instance-owned properties.
  • Keep message-pattern handlers and event-pattern handlers distinct, since event handlers do not follow request/response semantics.
  • Ensure transport-specific metadata is respected when filtering or registering discovered listener definitions.
  • Treat this class as infrastructure code: changes can affect controller discovery, client hooks, and microservice transport registration globally.

Was this page helpful?

Download as PDF
ListenerMetadataExplorer — NestJS head-to-head