nelsonsar/microqueue

dev-master 2016-02-16 13:22 UTC

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.

为什么?

当公司需要快速解决与客户的通知或通信问题时,许多公司使用数据库表作为队列,这些队列难以维护,并且消耗大量的数据库资源。此外,它总是涉及一些糟糕的事情(你可以在这里看到一些)和副作用。

它如何工作?

它真的非常简单

  1. 使用一个 字符串 名称声明一个队列;
  2. 为该队列创建一个消费者;
  3. 为相同的队列创建一个生产者;
  4. 发布消息!

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(它也非常小巧);
  • 创建一个控制台应用程序,帮助创建作为守护进程的消费者;