jtl / nachricht
Nachricht 是一个分布式事件队列系统
0.19.4
2024-03-08 12:41 UTC
Requires
- php: 8.1.* || 8.2.* || 8.3.*
- ext-json: *
- ext-pcntl: *
- jtl/php-generic-collection: ^1.0.0
- nikic/php-parser: ^4.18.0
- psr/container: ^2.0.2
- psr/event-dispatcher: ^1.0
- psr/log: ^3.0
- ramsey/uuid: ^4.7.5
- symfony/config: ^6.4.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.50.0
- mockery/mockery: ^1.6.7
- php-amqplib/php-amqplib: ^3.6.1
- phpstan/phpstan: ^1.10.59
- phpunit/phpunit: ^9.6.17
Suggests
- monolog/monolog: Required when using AmqpEmitter / Consumer
- php-amqplib/php-amqplib: Required for RabbitMq Transport
- symfony/dependency-injection: Recommended DI-Container
- symfony/yaml: Required for Symfony DI-Container and examples
- dev-master
- 0.19.4
- 0.19.3
- 0.19.2
- 0.19.1
- 0.19.0
- 0.18.0
- 0.17.3
- 0.17.2
- 0.17.1
- 0.17.0
- 0.16.1
- 0.16.0
- 0.15.0
- 0.14.3
- 0.14.2
- 0.14.1
- 0.14.0
- 0.13.5
- 0.13.4
- 0.13.3
- 0.13.2
- 0.13.1
- 0.13.0
- 0.12.0
- 0.11.0
- 0.10.0
- 0.9.0
- 0.8.0
- 0.7.0
- 0.6.0
- 0.5.0
- 0.4.0
- 0.3.0
- 0.2.0
- 0.1.0
- 0.0.2
- 0.0.1
- dev-EA-6324
- dev-EA-6300
- dev-dependabot/composer/examples/phpseclib/phpseclib-3.0.21
- dev-dependabot/composer/phpseclib/phpseclib-3.0.21
- dev-EA-5384
- dev-log_deadletter
- dev-consumer_timeout
- dev-EA-3616
- dev-EA-4622
- dev-RemoveLog_13
- dev-UpdateGenericCollection
- dev-ExtendLog0_13
- dev-ExtendLog
- dev-ci
This package is auto-updated.
Last update: 2024-09-08 13:39:37 UTC
README
Nachricht
Nachricht 是一个专注于分发工作负载的消息分发器。
特点
- 直接分发消息
- 通过 AMQP 分发消息
- 自动发现以查找和创建 AMQP 消息队列
- 死信队列机制
要求
需要一个 PSR-11 兼容的容器(我们推荐使用 Symfony DependencyInjection 组件)。监听器实例将通过 $container->get($listenerClass)
从容器中获取。
在使用 Nachricht 之前,可能需要安装 RabbitMQ 的 延迟消息交换插件,以确保您可以使用消息延迟功能。
使用方法
通过实现 JTL\Nachricht\Contract\Message\Message
创建一个消息类。
use JTL\Nachricht\Contract\Message\Message; class DummyMessage implements Message { private string $data; public function __construct(string $data) { $this->data = $data; } public function getData(): string { return $this->data; } }
通过实现 JTL\Nachricht\Contract\Listener\Listener
创建一个监听器类
use JTL\Nachricht\Contract\Listener\Listener; class DummyListener implements Listener { public function listen(DummyMessage $event): void { echo 'Dummy Listener called: ' . $event->getData() . "\n"; } }
触发事件
$emitter = $container->get(DirectEmitter::class); $event = new FooMessage('Test'); $emitter->emit($event);
输出
# php examples/DirectEmit/DirectEmit.php FooListener called: Test
触发延迟消息
延迟可用于使消息在达到定义时间之前对消费者不可见。有两种类型的延迟可用
在消息构造时:当消息被触发时延迟消息。您可以在创建新的消息实例时指定此类延迟(以秒为单位)。
$event = new DelayedDummyAmqpMessage(data: 'Test', delay: 3); $emitter->emit($event);
要指定重试延迟,重写方法 getRetryDelay(): int
(默认重试延迟设置为 3 秒)。每次 Listener 面临错误时,此延迟都将用于使 jtl/nachricht 重新排队消息
您可以在 example
目录中找到更多示例。