geggleto/slimq

SlimQ 使您能够将任务推送到后台工作者

1.0.3 2021-03-09 08:07 UTC

This package is auto-updated.

Last update: 2024-09-09 15:31:33 UTC


README

一个库,为开发人员提供通过 AMQP 协议轻松使用序列化和反序列化的功能。

依赖项

您需要确保 Rabbit MQ 已运行;您可以通过以下方式使用 docker 运行它:

docker run -d --hostname myrabbit --name myrabbit -p 15672:15672 -p 5672:5672 rabbitmq:3.8.11-management

查看实际效果

  • 运行生产者脚本 - php cli/producer.php
  • 运行消费者脚本 - php cli/consumer.php

如果您想实时查看

  • 请使用位于 http://localhost:15672 的 RabbitMQ 管理面板
    • 用户名 guest
    • 密码 quest

为什么是死信队列?

如果您的应用程序拒绝消息,它将流入死信队列以实现容错。

使用/设计注意事项

1. 序列化对象

class MyObject extends \SimpleQueue\Messaging\AbstractAmqpObject {
    protected static string $routingKey = 'MyQueue.Cool';

    public function getApplicationId(): ?string
    {
        return 'sf-internal-web';
    }
}

唯一的要求是您必须提供一个路由键。具体类的构造函数接受一个数组作为有效载荷。您可以使用它将任何对象/参数序列化为标量值并发送到后台工作者。例如,这是您系统中的事件。

class MyHandler implements \SimpleQueue\Messaging\MessageHandler {

    public function handle(\SimpleQueue\Messaging\AmqpObjectInterface $object)
    {
        var_dump($object->getPayload());
    }
}

$object->getPayload() 是系统放入构造函数中的任何内容,只要它填充了标量值或可以被 json 序列化。在您的处理器中,您可以执行满足您需求的任何操作。这可能包括运行后台任务或执行事件。

2. 死信队列

默认情况下,配置工厂将为您生成并绑定 DLX/DLQ,这建议用于容错。

支持

在推特 @geggleto 上找到我