rasuvaeff/yii3-outbox-db
最新稳定版本:v1.0.0
Composer 安装命令:
composer require rasuvaeff/yii3-outbox-db
包简介
Database-backed outbox storage for Yii3
README 文档
README
Database-backed storage for rasuvaeff/yii3-outbox.
Durably persists outbox messages in a yiisoft/db table so a worker can publish
or export them asynchronously — surviving process restarts and downstream outages.
Using an AI coding assistant? llms.txt has a compact API reference you can use.
Requirements
- PHP 8.3+
rasuvaeff/yii3-outbox^1.0yiisoft/db^2.0,yiisoft/db-migration^2.0
Installation
composer require rasuvaeff/yii3-outbox-db
Usage
Migration
Apply the bundled migration to create the outbox table (default name outbox):
use M260611000000CreateOutboxTable; (new M260611000000CreateOutboxTable())->up($migrationBuilder); // custom table: new M260611000000CreateOutboxTable(table: 'my_outbox')
Recording and processing
use Rasuvaeff\Yii3Outbox\Outbox; use Rasuvaeff\Yii3OutboxDb\DbOutboxStorage; $storage = new DbOutboxStorage(db: $connection); // ConnectionInterface $outbox = new Outbox(storage: $storage, clock: $clock); // request path — durable, no network call to the sink $outbox->record(type: 'ab.exposure', payload: '{"experiment":"checkout"}'); // worker — fetch a batch of one consumer's types and process them $pending = $storage->findPending(types: ['ab.exposure', 'ab.conversion'], limit: 1000);
Storage API
| Method | Purpose |
|---|---|
save(OutboxMessage) |
upsert by id (initial record or retry re-save) |
findPending(array $types = [], int $limit = 1000) |
pending rows, optional type filter, created_at ASC |
markPublished(OutboxMessage) |
re-save with Published status |
markFailed(OutboxMessage) |
re-save with Failed status |
getById(string $id) |
single message or null |
deleteByStatus(OutboxStatus) |
housekeeping (e.g. purge Published) |
findPending's $types filter lets several consumers — a generic Processor
and a specialized exporter — share one outbox without competing for each other's
messages.
Yii3 DI
The config-plugin binds StorageInterface to DbOutboxStorage from
config/di.php. Core yii3-outbox binds nothing, so this backend (or the
application) is the single source of StorageInterface. Set the table name in
params:
// config/params.php 'rasuvaeff/yii3-outbox-db' => ['table' => 'outbox'],
Security
- All values are written through
yiisoft/dbparameterized commands. OutboxRowMappervalidates every column and rejects corrupt rows withInvalidOutboxRowException— no silent coercion.- Payloads may contain PII; retention/purging is the application's responsibility
(
deleteByStatushelps).
Examples
Runnable scripts live in examples/.
Development
make build # full gate: validate + normalize + require-checker + cs + psalm + test make cs-fix make psalm make test
Core yii3-outbox is consumed via a path repository while unpublished — see
AGENTS.md for the monorepo-root Docker invocation.
License
BSD-3-Clause. See LICENSE.md.
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: BSD-3-Clause
- 更新时间: 2026-06-12