iron-io / iron_mq
IronMQ (托管消息队列) 的客户端绑定
Requires
- php: >=5.2.0
- iron-io/iron_core: 1.*
Requires (Dev)
- mikey179/vfsstream: ~1.5
- phpmd/phpmd: ~2.2
- phpunit/phpunit: 4.6.*
- squizlabs/php_codesniffer: ~2.3
This package is not auto-updated.
Last update: 2024-09-09 21:17:26 UTC
README
IronMQ 是一种弹性消息队列,用于在云应用程序和系统之间管理数据和事件流。
此库使用 IronMQ API v3。
分支
如果你使用 Laravel 并且看到 "Class IronMQ not found"
错误,请将 iron_mq
版本设置为 1.*
并安装/更新依赖项。
1.*
- Laravel 4.0/4.1/4.2/5.0 兼容,PHP 5.2 兼容版本。没有命名空间。使用 IronMQv2 服务器(已弃用)。2.*
- Laravel 5.1/5.2 兼容,PSR-4 兼容版本。带有命名空间。使用 IronMQv2 服务器(已弃用)。3.*
- Laravel 4.0/4.1/4.2/5.0 兼容,PHP 5.2 兼容版本。IronMQv3。4.*
- (推荐)Laravel 5.1/5.2 兼容,PSR-4 兼容版本。带有命名空间。IronMQv3。当前默认。master
分支 - 与4.*
相同
更新说明
- 1.3.0 - 修改了
postMessage
和postMessages
方法中的参数列表。请检查使用这些方法的代码。 - 1.4.5 - 添加了
getMessagePushStatuses
和deleteMessagePushStatus
方法。 - 2.0.0 - 版本 2.0 引入了一些不兼容的更改。IronMQ 客户端最终 PSR-4 兼容,使用命名空间和 PHP 5.3 的其他功能。如果你是从之前(1.x)版本迁移的,请仔细检查 iron_mq / iron_core 类的加载方式。如果你需要一些 1.x 功能,如
.phar
存档,请使用最新的 1.x 稳定版本:https://github.com/iron-io/iron_mq_php/releases/tag/1.5.3
入门
获取凭证
要开始使用 iron_mq_php,您需要注册并获取一个 oauth 令牌。
- 转到 http://iron.io/ 并注册。
- 在 http://hud.iron.io/tokens 获取 Oauth 令牌
--
安装 iron_mq_php
有两种方式可以使用 iron_mq_php
使用 composer
在项目目录中创建 composer.json
文件
{ "require": { "iron-io/iron_mq": "2.*" } }
执行 composer install
(如果需要,请安装它:https://getcomposer.org.cn/download/)
并使用它
require __DIR__ . '/vendor/autoload.php'; $ironmq = new \IronMQ\IronMQ();
直接使用类(强烈不推荐)
- 将
src
目录中的类复制到目标目录 - 从 那里 获取 IronCore 类并将其复制到目标目录
- 包含它们所有。
require 'src/HttpException.php'; require 'src/IronCore.php'; require 'src/IronMQ.php'; require 'src/IronMQException.php'; require 'src/IronMQMessage.php'; require 'src/JsonException.php'; $ironmq = new \IronMQ\IronMQ();
--
配置
配置 IronMQ 的三种方式
- 传递包含选项的数组
<?php $ironmq = new \IronMQ\IronMQ(array( "token" => 'XXXXXXXXX', "project_id" => 'XXXXXXXXX' ));
- 传递存储配置选项的 ini 文件名。将 sample_config.ini 重命名为 config.ini 并包含您的 Iron.io 凭证(
token
和project_id
)
<?php $ironmq = new \IronMQ\IronMQ('config.json');
-
自动 配置 搜索 - 将零个参数传递给构造函数,库将尝试在以下位置查找配置文件
- 当前目录中的
iron.ini
- 当前目录中的
iron.json
IRON_MQ_TOKEN
、IRON_MQ_PROJECT_ID
和其他环境变量IRON_TOKEN
、IRON_PROJECT_ID
和其他环境变量- 用户主目录中的
.iron.ini
- 用户主目录中的
.iron.json
- 当前目录中的
--
Keystone 身份验证
通过配置文件
将 keystone
部分添加到您的 iron.json 文件中
{ "project_id": "57a7b7b35e8e331d45000001", "keystone": { "server": "http://your.keystone.host/v2.0/", "tenant": "some-group", "username": "name", "password": "password" } }
在代码中
$keystone = array( "server" => "http://your.keystone.host/v2.0/", "tenant" => "some-gorup", "username" => "name", "password" => "password" ); $ironmq = new \IronMQ\IronMQ(array( "project_id" => '57a7b7b35e8e331d45000001', "keystone" => $keystone ));
基础知识
向队列发送消息
<?php $ironmq->postMessage($queue_name, "Hello world");
更复杂的示例
<?php $ironmq->postMessage($queue_name, "Test Message", array( "timeout" => 120, # Timeout, in seconds. After timeout, item will be placed back on queue. Defaults to 60. "delay" => 5, # The item will not be available on the queue until this many seconds have passed. Defaults to 0. "expires_in" => 2*24*3600 # How long, in seconds, to keep the item on the queue before it is deleted. ));
在一次 API 调用中发送多个消息
<?php $ironmq->postMessages($queue_name, array("Message 1", "Message 2"), array( "timeout" => 120 ));
--
预留消息
<?php $ironmq->reserveMessage($queue_name);
当从队列中弹出/获取消息时,它不会被删除。如果你不删除它,它最终会在超时后返回队列(默认超时时间为60秒)。
在一个API调用中保留多个消息
<?php $ironmq->reserveMessages($queue_name, 3);
删除、触摸或释放消息等操作需要reservation Id。它可以在保留消息后从消息模型中获取
<?php $message = $ironmq->reserveMessage($queue_name); $reservation_id = $message->reservation_id;
--
从队列中删除消息
<?php $ironmq->deleteMessage($queue_name, $message_id, $reservation_id);
如果消息未被保留,则不需要提供reservation Id
<?php $ironmq->deleteMessage($queue_name, $message_id);
在处理完消息后从队列中删除它。
在一个API调用中删除多个消息
<?php $ironmq->deleteMessages($queue_name, array("xxxxxxxxx", "xxxxxxxxx"));
删除由消息id数组指定的多个消息。
也可以删除消息对象数组
<?php $messages = $ironmq->reserveMessages($queue_name, 3); $ironmq->deleteMessage($queue_name, $messages);
--
故障排除
http错误:0
如果你看到未捕获的异常 'Http_Exception',消息为 'http error: 0 | '
,这很可能是由于配置错误的cURL https证书引起的。有两种方法可以修复此错误
- 禁用SSL证书验证 - 在IronMQ初始化后添加此行:
$ironmq->ssl_verifypeer = false;
- 切换到http协议 - 将以下内容添加到配置选项中:
protocol = http
和port = 80
- 修复错误!建议的解决方案:下载实际证书 - cacert.pem并将它们添加到
php.ini
[PHP]
curl.cainfo = "path\to\cacert.pem"
--
更新笔记
- 1.3.0 - 修改了
postMessage
和postMessages
方法中的参数列表。请检查使用这些方法的代码。 - 1.4.5 - 添加了
getMessagePushStatuses
和deleteMessagePushStatus
方法。
--
队列
IronMQ客户端
IronMQ
基于IronCore
并提供对整个IronMQ API的轻松访问。
<?php $ironmq = new \IronMQ\IronMQ(array( "token" => 'XXXXXXXXX', "project_id" => 'XXXXXXXXX' ));
--
列出队列
此代码将返回前30个按名称排序的队列。
<?php $queues = $ironmq->getQueues();
可选参数
per_page
:响应中的元素数量,默认为30。previous
:这是上一页上的最后一个队列,它将从下一个开始。如果指定的队列名称不存在,则结果将包含第一个按字典序大于previous的per_page队列
假设你有名为 "a","b","c","d","e" 的队列。以下代码将列出 "c","d" 和 "e" 队列
<?php $queues = $ironmq->getQueues('b', 3);
--
检索队列信息
<?php $qinfo = $ironmq->getQueue($queue_name);
--
删除消息队列
<?php $response = $ironmq->deleteQueue($queue_name);
--
向队列发布消息
单个消息
<?php $ironmq->postMessage($queue_name, "Test Message", array( 'delay' => 2, 'expires_in' => 2*24*3600 # 2 days ));
多个消息
<?php $ironmq->postMessages($queue_name, array("Lorem", "Ipsum"), array( "delay" => 2, "expires_in" => 2*24*3600 # 2 days ));
可选参数(第3个,键值对数组)
-
delay
:项目将在此秒数过去之后才在队列中可用。默认为0秒。最大值为604,800秒(7天)。 -
expires_in
:在删除项目之前在队列中保留项目的时间(秒)。默认为604,800秒(7天)。最大值为2,592,000秒(30天)。 -
:已弃用。在发布消息时无法设置超时,只有在保留消息时才能设置。timeout
--
从队列中获取消息
单个消息
<?php $message = $ironmq->reserveMessage($queue_name, $timeout);
多个消息
<?php $message = $ironmq->reserveMessages($queue_name, $count, $timeout, $wait);
可选参数
-
$count
:获取的最大消息数。默认为1。最大值为100。 -
$timeout
:在超时(秒)后,项目将返回队列。你必须从队列中删除消息以确保它不会返回队列。如果没有设置,则使用POST中的值。默认为60秒。最小值为30秒。最大值为86,400秒(24小时)。 -
$wait
:长轮询消息的时间(秒)。最大为30秒。默认为0。
--
触摸队列上的消息
触摸保留的消息会返回具有指定或默认超时的新reservation。
<?php $ironmq->touchMessage($queue_name, $message_id, $reservation_id, $timeout);
--
释放消息
<?php $ironmq->releaseMessage($queue_name, $message_id, $reservation_id, $delay);
参数
$delay
:项目将在多少秒后才在队列中可用。默认为0秒。最大值为604,800秒(7天)。
--
从队列中删除消息
<?php $ironmq->deleteMessage($queue_name, $message_id, $reservation_id);
--
从队列中窥视消息
窥视队列返回队列上的下一个消息,但不会保留它们。
单个消息
<?php $message = $ironmq->peekMessage($queue_name);
多个消息
<?php $messages = $ironmq->peekMessages($queue_name, $count);
--
清除队列
<?php $ironmq->clearQueue($queue_name);
--
推送队列
IronMQ推送队列允许您设置一个队列,该队列会向端点推送消息,而不是需要轮询端点。 这里是关于推送队列概述的公告。
创建队列
<?php $params = array( "message_timeout" => 120, "message_expiration" => 24 * 3600, "push" => array( "subscribers" => array( array("url" => "http://your.first.cool.endpoint.com/push", "name" => "first"), array("url" => "http://your.second.cool.endpoint.com/push", "name" => "second") ), "retries" => 4, "retries_delay" => 30, "error_queue" => "error_queue_name" ) ); $ironmq->createQueue($queue_name, $params);
选项
type
:字符串或符号。队列类型。:pull
、:multicast
、:unicast
。字段必须且静态。message_timeout
:整数。消息在队列中未删除或未接触前返回队列的秒数。message_expiration
:整数。消息从队列中发布到队列以及消息过期之间的秒数。
以下参数都与推送队列相关
push: subscribers
:一个包含必需字段name
和url
的订阅者哈希数组,以及可选的headers
哈希。`headers`的键是名称,值是HTTP头的方式。这组订阅者将替换现有的订阅者。要添加或删除订阅者,请参阅添加订阅者端点或删除订阅者端点。下面是示例json。push: retries
:在失败时重试的次数。默认为3。最大为100。push: retries_delay
:每次重试之间的延迟(秒)。默认为60。push: error_queue
:字符串。用于发布推送错误的队列名称。
--
更新队列信息
与创建队列相同。推送队列不能更改为拉取队列,反之亦然。
在队列上添加/删除订阅者
向推送队列添加订阅者
<?php $ironmq->addSubscriber($queue_name, array( "url" => "http://cool.remote.endpoint.com/push", "name" => "subscriber_name", "headers" => array( "Content-Type" => "application/json" ) ) ); $ironmq->addSubscribers($queue_name, array( array( "url" => "http://first.remote.endpoint.com/push", "name" => "first"), array( "url" => "http://second.remote.endpoint.com/push", "name" => "second") ) );
--
替换队列上的订阅者
设置队列的订阅者列表。旧订阅者将被删除。
<?php $ironmq->replaceSubscriber($queue_name, array( "url" => "http://cool.remote.endpoint.com/push", "name" => "subscriber_name" ) ); $ironmq->addSubscribers($queue_name, array( array( "url" => "http://first.remote.endpoint.com/push", "name" => "first"), array( "url" => "http://second.remote.endpoint.com/push", "name" => "second") ) );
从队列中删除订阅者
从队列中删除订阅者。这仅适用于推送队列。
<?php $ironmq->removeSubscriber($queue_name, array( "name" => "subscriber_name" ) ); $ironmq->removeSubscribers($queue_name, array( array("name" => "first"), array("name" => "second") ) );
获取消息推送状态
<?php $response = $ironmq->postMessage('push me!'); $message_id = $response["ids"][0]; $statuses = $ironmq->getMessagePushStatuses($queue_name, $message_id);
返回包含状态的订阅者数组。
--
确认,推送消息已处理
此方法可用于确认推送消息的处理。有关长处理信息,请参阅IronMQ v3文档。
<?php $ironmq->deletePushMessage($queue_name, $message_id, $reservation_id, $subscriber_name);
--
更多链接
© 2011 - 2013 Iron.io Inc. 版权所有。