Skip to main content

RpcContext

Defined in: src/context/rpc.context.ts:35

Execution context for RPC and event handlers.

Provides convenient accessors for the NATS message, subject, headers, and JetStream metadata without needing to interact with the raw message directly.

Handlers can also control message settlement via retry and terminate instead of throwing errors.

Example

@EventPattern('order.process')
async handle(@Payload() data: OrderDto, @Ctx() ctx: RpcContext) {
if (ctx.getDeliveryCount()! >= 3) {
ctx.terminate('Max business retries exceeded');
return;
}
if (!this.isReady()) {
ctx.retry({ delayMs: 5000 });
return;
}
await this.process(data);
}

Extends

  • BaseRpcContext<[NatsMessage]>

Constructors

Constructor

new RpcContext(args): RpcContext

Defined in: node_modules/.pnpm/@nestjs+microservices@11.1.17_@grpc+grpc-js@1.14.3_@nestjs+common@11.1.17_reflect-metad_7277f1dab133b705fe5da76c655f7d0b/node_modules/@nestjs/microservices/ctx-host/base-rpc.context.d.ts:6

Parameters

args

[NatsMessage]

Returns

RpcContext

Inherited from

BaseRpcContext<[NatsMessage]>.constructor

Methods

getCallerName()

getCallerName(): string | undefined

Defined in: src/context/rpc.context.ts:111

The name of the service that published this message (from x-caller-name header).

Returns

string | undefined


getDeliveryCount()

getDeliveryCount(): number | undefined

Defined in: src/context/rpc.context.ts:89

How many times this message has been delivered.

Returns

number | undefined


getHeader()

getHeader(key): string | undefined

Defined in: src/context/rpc.context.ts:70

Get a single header value by key.

Parameters

key

string

Header name (e.g. 'x-trace-id').

Returns

string | undefined

Header value, or undefined if the header is missing.


getHeaders()

getHeaders(): MsgHdrs | undefined

Defined in: src/context/rpc.context.ts:60

Returns

MsgHdrs | undefined

All NATS message headers, or undefined if none are present.


getMessage()

getMessage(): NatsMessage

Defined in: src/context/rpc.context.ts:50

Get the underlying NATS message.

Returns

NatsMessage

JsMsg for JetStream handlers, Msg for Core RPC handlers.


getSequence()

getSequence(): number | undefined

Defined in: src/context/rpc.context.ts:99

The stream sequence number.

Returns

number | undefined


getStream()

getStream(): string | undefined

Defined in: src/context/rpc.context.ts:94

The JetStream stream this message belongs to.

Returns

string | undefined


getSubject()

getSubject(): string

Defined in: src/context/rpc.context.ts:55

Returns

string

The NATS subject this message was published to.


getTimestamp()

getTimestamp(): Date | undefined

Defined in: src/context/rpc.context.ts:104

The message timestamp as a Date (derived from info.timestampNanos).

Returns

Date | undefined


isJetStream()

isJetStream(): this is RpcContext & { getMessage: any }

Defined in: src/context/rpc.context.ts:80

Type guard: returns true when the message is a JetStream message.

Narrows getMessage() return type to JsMsg, giving access to ack(), nak(), term(), and delivery metadata.

Returns

this is RpcContext & { getMessage: any }


retry()

retry(opts?): void

Defined in: src/context/rpc.context.ts:128

Signal the transport to retry (nak) this message instead of acknowledging it.

Use for business-level retries without throwing errors. Only affects JetStream event handlers (workqueue/broadcast).

Parameters

opts?

Optional delay in ms before redelivery.

delayMs?

number

Returns

void

Throws

Error if terminate was already called.


terminate()

terminate(reason?): void

Defined in: src/context/rpc.context.ts:148

Signal the transport to permanently reject (term) this message.

Use when a message is no longer relevant and should not be retried or sent to DLQ. Only affects JetStream event handlers (workqueue/broadcast).

Parameters

reason?

string

Optional reason for termination (logged by NATS).

Returns

void

Throws

Error if retry was already called.