Skip to content

Bug: NATS broker publishMessage treats synchronous publish() as a Promise #4718

@coderabbitai

Description

@coderabbitai

Issue Description

In the NATS broker implementation, there's a critical bug in the publishMessage method where client.publish() is treated as a Promise in a Promise.race() construction.

File: src/auth-service/utils/messaging/brokers/nats-broker.js

Problem:
The @nats/js's publish() method returns void (not a Promise). When treating it as a promise with Promise.race(), publishPromise resolves immediately as undefined, and the timeout branch will always win – raising a false "timed-out" error on every call.

Impact:
This will mark the broker as unhealthy and trigger unnecessary fail-over to other message brokers, degrading performance and potentially causing message delivery issues.

Proposed Solutions

Either:

  1. Await the flush operation instead:
this.client.publish(topic, payloadBuf);
await this.client.flush();
  1. Remove the Promise.race and rely on the library's internal back-pressure.

References

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions