geggleto / slimq
SlimQ 使您能够将任务推送到后台工作者
1.0.3
2021-03-09 08:07 UTC
Requires
- php: >=7.4
- monolog/monolog: ^2.0
- php-amqplib/php-amqplib: ^2.6
- psr/container: ^1.0
Requires (Dev)
- mockery/mockery: ^0.9.9
- phpunit/phpunit: ^5.6
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 上找到我