amabnl / php-mqseries

一个使用PHP mqseries pecl扩展与WebSphere MQ队列管理器接口的库

dev-master 2016-02-02 16:21 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:20:42 UTC


README

一个使用PHP mqseries pecl扩展与WebSphere MQ队列管理器接口的库

目的

这个库是为了能够在PHP中使用PECL模块mqseries为WebSphere MQ队列创建队列监听器而构建的。

它帮助你创建正确的结构以连接到WebSphere MQ队列管理器。

它目前支持打开到队列管理器的连接,打开特定队列,并从队列中检索消息。

如何

代码示例

	<?php

	use MqSeries;

	//Create connection:
    $connectParams = new Connectx\Params();
	$connectParams->queueManagerName = 'QUEUEMANAGERNAME';
	$connectParams->serverConnectionChannel = 'CONNECTIONCHANNEL';
	$connectParams->serverIp = 'QUEUEMANAGERIPADDRESS';
	$connectParams->serverPort = 6666; //Port number to connect to
	$connectParams->keyRepository = '/var/mqm/qmgrs/path/to/ssl/key/repository/'; //OPTIONAL SSL KEY REPO IF SSL IS USED
	$connectParams->responderUrl = 'http://dummy.OCSP.responder'; //OPTIONAL OCSP Responder
	$connectParams->sslCipherSpec = 'RC4_SHA_US'; //OPTIONAL SSL cipher spec
	//$connectParams->localAddress = '127.0.0.1'; //OPTIONAL: TO CONNECT FROM A SPECIFIC LOCAL NETWORK INTERFACE.
	//$connectParams->localPort = 16666; //OPTIONAL: TO CONNECT FROM A SPECIFIC LOCAL PORT
	$connectParams->options = MQSERIES_MQCNO_STANDARD_BINDING;

	$client = new Service(
		new Psr\Log\NullLogger(),
		$connectParams,
		50000  //Default message size
	);

	//Open Queue:
	$openParams = new Open\Params(); 
	$openParams->objectDescType = MQSERIES_MQOT_Q;
	$openParams->objectName = 'QUEUENAME';
	$openParams->objectQMName  = 'QUEUEMANAGERNAME';
	$openParams->option = MQSERIES_MQOO_INPUT_AS_Q_DEF | MQSERIES_MQOO_FAIL_IF_QUIESCING;

	try {
		$queueOpenResult = $client->openQueueOnQM($openParams);
	} catch (QueueManagerConnectionFailedException $ex) {
		die('Exception when opening queue: ' . $ex->getCode() . ' - ' . $ex->getMessage());
	} catch (ExtensionNotLoadedException $ex) {
		die('YOU MUST FIRST ENABLE THE mqseries PHP EXTENSION');
	} catch (NoConnectionParametersException $ex) {
		die('YOU DID NOT PROVIDE CONNECTX PARAMS!');
	} 

	//Get one message from queue:
	if ($queueOpenResult !== true) {
		die(
			'SOMETHING WENT WRONG WHEN OPENING THE QUEUE: ' . 
			sprintf(
				"CompCode:%d Reason:%d Text:%s\n",
				$client->getLastCompletionCode(), 
				$client->getLastCompletionReasonCode(), 
				$client->getLastCompletionReason()
			)
		);
	}

	$mqGetParams = new Get\Params(); 
	$mqGetParams->mdMsgType = MQSERIES_MQMT_DATAGRAM;
	$mqGetParams->mdPersistence = MQSERIES_MQPER_NOT_PERSISTENT;
	$mqGetParams->mdFormat = MQSERIES_MQFMT_STRING;
	$mqGetParams->mdApplOriginData = 'IEDI';
	$mqGetParams->mdReplyToQ = 'ERRORQUEUENAME';
	$mqGetParams->mdReplyToQMgr = 'QUEUEMANAGERTOREPLYTO';
	$mqGetParams->gmoOptions = MQSERIES_MQGMO_FAIL_IF_QUIESCING | MQSERIES_MQGMO_WAIT | MQSERIES_MQGMO_CONVERT;
	$mqGetParams->gmoWaitInterval = 15000;
	
	try {
		$messageContent = $client->getMessageFromQueue($this->makeMqGetMessageFromQParams());
	catch (QueueIsEmptyException $ex) {
		echo "The queue is empty, no big deal.";
	}

	if (is_string($messageContent)) {
		echo 'message retrieved from queue: ' . $messageContent;
	} else {
		die(
			'SOMETHING WENT WRONG WHEN RETRIEVING A MESSAGE: ' . 
			sprintf(
				"CompCode:%d Reason:%d Text:%s\n",
				$client->getLastCompletionCode(), 
				$client->getLastCompletionReasonCode(), 
				$client->getLastCompletionReason()
			)
		);
	}

	//Close & disconnect:
	$client->close();
    $client->disconnect();

版本

此库已在PHP 5.4、5.5、5.6上与WebSphere MQ客户端7.1版本以及mqseries-0.14.2一起测试过。