函数名:mqseries_get()
适用版本:PHP 7.0.0 及以上版本
用法:mqseries_get() 函数用于从 IBM MQ 队列中获取消息,并将其存储在一个数组中。
语法:mqseries_get(resource $hconn, resource $hobj, array &$md, array &$gmo, int &$bufferlength, string &$buffer, int &$data_length, int &$comp_code, int &$reason)
参数:
- $hconn:MQ 连接句柄,由 mqseries_conn() 函数返回。
- $hobj:MQ 对象句柄,由 mqseries_open() 函数返回。
- $md:一个关联数组,用于存储消息描述符(Message Descriptor)的信息,包括消息类型、优先级等。
- $gmo:一个关联数组,用于存储获取选项(Get Options)的信息,包括获取模式、等待时间等。
- $bufferlength:一个整数变量,用于指定接收消息的缓冲区大小。
- $buffer:一个字符串变量,用于存储接收到的消息数据。
- $data_length:一个整数变量,用于存储接收到的消息数据的长度。
- $comp_code:一个整数变量,用于存储操作完成的结果代码。
- $reason:一个整数变量,用于存储操作完成的详细原因代码。
返回值:如果成功获取消息,则返回 true;如果没有消息可用或者发生错误,则返回 false。
示例:
// 创建 MQ 连接
$conn_options = array(
MQSERIES_MQCNO_HANDLE_SHARE_BLOCK,
MQSERIES_MQCNO_RECONNECT,
);
$hconn = mqseries_conn('QMGR', $conn_options);
// 打开 MQ 队列
$open_options = array(
MQSERIES_MQOO_INPUT_AS_Q_DEF,
);
$hobj = mqseries_open($hconn, 'QUEUE', $open_options);
// 准备消息描述符
$md = array(
'MsgType' => MQSERIES_MQMT_REQUEST,
'Feedback' => MQSERIES_MQFB_NONE,
);
// 准备获取选项
$gmo = array(
'Options' => MQSERIES_MQGMO_WAIT | MQSERIES_MQGMO_CONVERT,
'WaitInterval' => MQSERIES_MQWI_UNLIMITED,
);
// 定义缓冲区大小
$bufferlength = 1024;
// 接收消息
$buffer = '';
$data_length = 0;
$comp_code = 0;
$reason = 0;
$result = mqseries_get($hconn, $hobj, $md, $gmo, $bufferlength, $buffer, $data_length, $comp_code, $reason);
if ($result) {
echo "成功获取消息:\n";
echo "消息类型:" . $md['MsgType'] . "\n";
echo "消息数据:" . $buffer . "\n";
} else {
echo "获取消息失败,原因代码:" . $reason . "\n";
}
// 关闭 MQ 队列
mqseries_close($hconn, $hobj);
// 断开 MQ 连接
mqseries_disc($hconn);
注意事项:
- 在使用 mqseries_get() 函数之前,需要先通过 mqseries_conn() 函数创建 MQ 连接,并通过 mqseries_open() 函数打开 MQ 队列。
- 在接收消息之前,需要准备好消息描述符($md)和获取选项($gmo)。
- 接收到的消息数据将存储在 $buffer 变量中,消息数据的长度将存储在 $data_length 变量中。
- 如果成功获取消息,则 $comp_code 变量的值为 MQSERIES_MQCC_OK,否则为 MQSERIES_MQCC_FAILED,详细错误原因可查看 $reason 变量的值。