Skip to content

bugfix/DEV-4588 - Veel NATS messages worden niet opgepakt zoals bij de GFP te zien - #1

Merged
Elandlord merged 1 commit into
mainfrom
bugfix/DEV-4588
Mar 27, 2026
Merged

bugfix/DEV-4588 - Veel NATS messages worden niet opgepakt zoals bij de GFP te zien#1
Elandlord merged 1 commit into
mainfrom
bugfix/DEV-4588

Conversation

@Elandlord

Copy link
Copy Markdown
Owner

Theorie A: put() vs publish()

We hebben put in plaats van publish gebruikt voor de JetStreamPublisher.
Bij een put is het "fire and forget", wat handig is voor logging en monitoring als een message niet per se aan hoeft te komen. Met een publish komt er ook een ACK terug. Echter na publish geïmplementeerd te hebben, werkt het nog niet.

We hebben nu wel beide, waarbij publish standaard ACK doet (= veiliger) en ik heb publishFireAndForget toegevoegd voor logging / telemetry mocht iemand dat willen gebruiken.

Theorie B: Shared TCP socket ✅

De volgende theorie is dat shared TCP socket mogelijk het probleem is. (Gotta love FrankenPHP)

Yes dit is het. In FrankenPHP worker mode blijft PHP lekker draaien over meerdere requests heen. Normaal gesproken start/sterft het PHP proces als je geen FrankenPHP gebruikt.
Door worker mode worden Symfony services daarom maar 1x aangemaakt omdat het een shared resource is, en delen derhalve hetzelfde TCP socket. Zie dat als 1 telefoonlijn, waar dan meerdere mensen door elkaar heen praten; het gevolg is dat NATS maar flarden opvangt en dus inconsistent is voor de verwerking.

N.B. dit ging wel goed als er een lichte delay op zat, omdat er dan dus niet "door elkaar heen" gepraat wordt.

Changes

  • publish() gebruikt nu Stream::publish() (met ACK) in plaats van Stream::put()
  • publishFireAndForget() toegevoegd voor fire-and-forget use cases

🤖 Generated with Claude Code

Stream::put() is fire-and-forget — no delivery guarantee from JetStream.
Stream::publish() waits for an ack, ensuring the message was persisted.

publish() now uses the ack-based path as the safe default.
publishFireAndForget() retains the old put() behavior for cases where
delivery confirmation is unnecessary (logging, telemetry).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@Elandlord
Elandlord merged commit 56ba3cf into main Mar 27, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant