Releases: rasuvaeff/yii3-outbox-db
Releases · rasuvaeff/yii3-outbox-db
Release list
v2.0.2
- Docs: the documented
setSourceNamespaces()migration registration does not
find the bundled migration and never has —yiisoft/db-migrationmatches the
PSR-4 map by string prefix and resolves into the core package, so
./yii migrate:upexits 0 having created nothing. Both READMEs now say so and
give a workingInjector-based recipe until the upstream fix ships.
v2.0.1
- Document
claim(). It is the atomic primitive a worker must use — and the one
Processorcalls — but the storage API tables inREADME.md,README.ru.md
andllms.txtomitted it entirely, and the worker example showed
findPending()instead. Following the docs gave non-atomic polling: two
workers pick up the same row and publish it twice. - Spell out the operational consequences: every claimed message must reach a
terminal state or it staysProcessing, and independent consumers sharing one
outbox must not overlap in theirtypessets.
v2.0.0
Breaking. See UPGRADE.md — an installation that already
applied the migration must rewrite one row in the migration table.
- The bundled migration moved to
Rasuvaeff\Yii3OutboxDb\Migration\M260611000000CreateOutboxTable
(src/Migration/, PSR-4 autoloaded) from a global class inmigrations/.
Register it withsetSourceNamespaces()instead of avendor/path. Being
autoloadable is what makes it safe to reference in DI at all: with the old
global class, adding any container definition for it made
Yiisoft\Di\Containerfatal at build time in every request, because
new ReflectionClass()ran before the migration runner had required the file. - The documented way to rename the table never worked.
M...::class => ['__construct()' => ['table' => ...]]is ignored:
yiisoft/db-migrationbuilds migrations throughInjector::make(), which
resolves arguments by name or type from the container and does not read
definitions keyed by the migration's class — and a scalarstring $tablehas
no type to resolve. Users following the README silently got the default name. - The table name is now a typed value object that
Injectorcan resolve,
built byconfig/di.phpfrom params. One source of truth: the migration and
DbOutboxStoragecannot disagree any more (in 1.x the runtime read params while the
migration used its own default, so configuring params pointed the runtime at a
table the migration had never created). - New
table_prefixparam, prepended totable— a single place to keep
package tables out of the way of an application's own. - Index names are derived from the table name (
idx_<table>_pending).
Unchanged for the default table name; in PostgreSQL, where index names are
unique per schema rather than per table, a hard-coded name collided between
two installations sharing a schema. DbOutboxStoragevalidates the table name (through the same value object) —
in 1.x it interpolated whatever string it was given straight into the query
builder, with no identifier check at all.- The row mapper's integer check is anchored with
\zinstead of$: PCRE's
$also matches before a trailing newline. - Fix
examples/basic-usage.php: it created the table with a hand-written
CREATE TABLEthat had drifted from the migration (noclaimed_bycolumn),
so running it fatalled on the firstclaim(). It now applies the bundled
migration, which cannot drift.
v1.0.2
- Add
/benchmarksand/Makefileto.gitattributesexport-ignore.
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
v1.0.1
v1.0.0
DbOutboxStorage—StorageInterfacebacked byyiisoft/db:save(upsert by id),findPending(array $types, int $limit)(status + optional type filter, ordered bycreated_at),markPublished,markFailed,getById, plusdeleteByStatusfor housekeeping.OutboxRowMapper— maps DB rows toOutboxMessage, validating status, datetimes and integer columns; throwsInvalidOutboxRowExceptionon corrupt rows.migrations/M260611000000CreateOutboxTable—outboxtable (MergeTree-agnostic SQL) with theidx_outbox_status_typeindex backing the pending poll.- Yii3 config-plugin: binds
StorageInterfacefromconfig/di.php; table name inconfig/params.php.