Skip to content

v1.1.0 — idempotent external event delivery

Choose a tag to compare

@mafilus mafilus released this 26 Aug 02:57
· 17 commits to main since this release

External event delivery deduplication

RaiseEvent supports a durable external delivery ID:

client.RaiseEvent(ctx, instanceID, "order.created",
    api.WithEventPayload(payload),
    api.WithExternalDeliveryID(messageID),
)

SQLite and PostgreSQL deduplicate a repeated non-empty delivery ID per
(instanceID, eventName, deliveryID). A retry after a publisher crash succeeds
without appending a second EventRaised event.

PostgreSQL upgrade

Before enabling external delivery IDs, apply:

psql "$DATABASE_URL" -v ON_ERROR_STOP=1
-f docs/migrations/postgresql/v1.1.0_external_event_deliveries.sql

Apply the migration before deploying v1.1.0 servers, then enable publishers.
Older gRPC servers do not preserve the delivery-ID guarantee.

Compatibility

Existing RaiseEvent calls are unchanged. Explicitly empty delivery IDs are
rejected. Custom backends must implement backend.ExternalEventDeliveryBackend.