jtl/nachricht

Nachricht 是一个分布式事件队列系统

0.19.4 2024-03-08 12:41 UTC

README

Testing

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 目录中找到更多示例。