graphaware/php-simplemq

此包最新版本(1.0.4)没有可用的许可信息。

Github事件API同步模块

1.0.4 2016-01-07 04:41 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:48:16 UTC


README

GraphAware的PHP Simple Message Queue for RabbitMQ

RabbitMQ的快速应用开发。

此库使得仅通过提供简单的YAML配置文件,就能动态地创建通道、队列、绑定、生产者、消费者等。

Build Status

用法

需要库依赖项

composer require graphaware/php-simplemq

定义连接、交换、生产者和消费者,例如

simple_mq:
  connections:
    default:
      host: 192.168.59.103
      port: 5672
      user: admin
      password: error
      vhost: "/"

  exchanges:
    logs:
      connection: default
      type: fanout
      durable: true

    error-logs:
      connection: default
      type: direct
      durable: true

  producers:
    logs:
      exchange: logs

    errors:
      exchange: error-logs
      routing_key: error

  consumers:
    logs-printer:
      exchange: logs
      ack: true
      queue:
        name: my-app-all-logs
        durable: true
        qos:
          prefetch_count: 1

    error-logs-recorder:
      exchange: error-logs
      queue:
        name: my-app-error-logs
        durable: true
        qos:
          prefetch_size: 1
        bindings:
          -
            queue: my-app-error-logs
            routing_key: error

通过提供配置文件的位置来启动库

require_once(__DIR__.'/vendor/autoload.php');

use GraphAware\SimpleMQ\SimpleMQ;

$smq = SimpleMQ::withYAMLConfigFile(__DIR__.'/path_to_your_config_file.yml');

基于示例配置,通过库可以获得名为logserrors的生产者以及名为logs-printererror-logs-recorder的消费者。

要检索并开始消费队列,可以使用以下方法

$consumer = $smq->getConsumer('logs-printer');

$callback = function($message) {
    print_r($message->body);
};

$consumer->consume($callback);

获取单个消息

$message = $consumer->getMessage();
// Returns a AMQPMessage instance

获取多个消息

$messages = $consumer->getMessageBatch(10);
// Returns an array of AMQPMessage

有时,消息从发送到生产者可见之间可能会有延迟(例如在CI套件中)。

您可以定义最大尝试次数(maxAttempts),在停止读取队列之前达到批量大小(batchSize)。

$messages = $consumer->getMessageBatch(10, 20);

要开始向交换发送消息,操作几乎相同

$producer = $smq->getProducer('errors');
$message = json_encode(array('id' => 1234, 'text' => 'Hello world'));

$producer->sendMessage($message);

根据配置,生产者和消费者确切地知道应该使用哪个路由键进行直接和主题交换,以及使用哪些绑定键将队列绑定到交换。

许可:MIT

作者:Christophe Willemsen