nelsonsar / microqueue
dev-master
2016-02-16 13:22 UTC
Requires
- nelsonsar/armadillo: dev-master
- nelsonsar/nash: dev-master
Requires (Dev)
- phpunit/phpunit: @stable
This package is not auto-updated.
Last update: 2024-09-24 04:06:58 UTC
README
A tiny (and extremely opinionated) framework to use mqueue and stop to use tables as queues.
为什么?
当公司需要快速解决与客户的通知或通信问题时,许多公司使用数据库表作为队列,这些队列难以维护,并且消耗大量的数据库资源。此外,它总是涉及一些糟糕的事情(你可以在这里看到一些)和副作用。
它如何工作?
它真的非常简单
- 使用一个 字符串 名称声明一个队列;
- 为该队列创建一个消费者;
- 为相同的队列创建一个生产者;
- 发布消息!
MicroQueue
没有任何配置,并使用事件来提供更多灵活性!(当然,这是我唯一能想到的避免消费者知道生产者的方法... 所以,抱歉)。
下面的脚本是一个如何简单实现的示例
// Consumer.php $queue = MicroQueue\Queue::declareQueue('sms'); $eventDispatcher = new \Armadillo\EventDispatcher; $consumer = new MicroQueue\Consumer($queue, $eventDispatcher); $consumer->consume(function($message, $eventDispatcher) { // your code for consuming messages } // Producer.php $queue = MicroQueue\Queue::declareQueue('sms'); $producer = new MicroQueue\Producer($queue); $producer->publish('This is a test' . PHP_EOL);
这应该足以开始发布消息。在 examples 文件夹中有一个示例,说明了如何使用事件来扩展消费者功能。
安装
此软件包可在 Packagist 上找到,您可以使用 composer 进行安装。
MicroQueue 是其他服务的替代品吗?
不是。由于以下原因
MicroQueue
具有阻塞性质(而大多数其他服务没有),这对大型工作来说并不好;MicroQueue
受限于会话(消费者和生产者需要在同一 Linux 会话中存在)以及您的操作系统(操作系统控制队列数量、消息数量和消息大小);MicroQueue
测试将很快开始(在生产环境中)因此我不能保证其可靠性。
测试
生产者
和 消费者
测试将使用您机器上安装的 mqueue
。如果您无法运行它们因为某些硬件限制,请使用 vagrant 机器来完成。关于单元测试我没有任何想法,对此表示歉意。
进一步工作
- 使用其他事件库,如
evenement
(它也非常小巧); - 创建一个控制台应用程序,帮助创建作为守护进程的消费者;