gallna / amqp-event
此包最新版本(3.0.2)没有可用的许可证信息。
Amqp消息分发器
3.0.2
2016-08-07 16:31 UTC
Requires
- php: >=5.4.0
- ext-amqp: *
- symfony/event-dispatcher: ~2.6
Requires (Dev)
- monolog/monolog: ~1.2
Suggests
- monolog/monolog: Allow sending log messages to a cli console
README
https://github.com/pdezwart/php-amqp
文档
https://php.ac.cn/manual/pl/book.amqp.php
示例
https://github.com/rabbitmq/rabbitmq-tutorials/tree/master/php-amqp
Rabit实现
https://github.com/php-amqplib/php-amqplib/tree/master/demo
分发
$envelope = new Amqp\Envelope();
$dispatcher = $amqp->getDispatcher();
// Publish message to queue
$dispatcher->dispatch("kernel.error", new Amqp\PublishEvent($envelope));
$dispatcher->dispatch("kernel.warning", new Amqp\PublishEvent($envelope));
// Publish message to exchange
$envelope->setExchangeName("exchangeName");
$dispatcher->dispatch("kernel.critical", new Amqp\PublishEvent($envelope));
$dispatcher->dispatch("kernel.notice", new Amqp\PublishEvent($envelope));
$dispatcher->dispatch("kernel.info", new Amqp\PublishEvent($envelope));
$dispatcher->dispatch("kernel.info", new Event());
$dispatcher->dispatch("kernel.message", new Event());
为确保消息发送到队列/交换 - 使用MandatoryEvent而不是Event进行分发
异常处理
逻辑异常
逻辑异常用于编译时发生的错误。由于PHP没有编译时,这通常被解释为“开发期间发生的错误”(例如,当开发人员忘记传递依赖项或根密钥时)
逻辑异常被移动到dead-letter交换,因为它们代表了程序逻辑中的错误。这类异常应直接导致代码修复和重新排队消息
DomainException(逻辑异常的子集)在没有任何监听器消费事件(无论是通过确认还是拒绝消息)时抛出。这只能通过删除不受支持的路径或添加缺失的确认来解决
运行时异常
运行时异常用于代码运行时发生的意外错误(通常源于用户输入)。
这些异常可能由暂时性的连接问题、速率限制等触发。它们会自动移动到wait交换,稍后重试。
可抛出对象
开发者决定如何通过将消费者包裹在try-catch块中处理任何其他Throwable。
- 可能被移动到
headers交换 - 在实施修复后重试 - 可能被消息代理移动到
dead-letter交换 - 带有
AMQP_REQUEUE标志拒绝错误消息会创建相同消息的流。注意重试计数以避免问题