origoenergia / azure-sdk-php-fork-servicebus
这是服务总线的PHP Azure SDK的一个分支
Requires
- php: >=7.2.0
- firebase/php-jwt: ^4.0 || ^5.0
- guzzlehttp/guzzle: ^7.0
- laminas/laminas-mail: ^2.7
- laminas/laminas-mime: ^2.6
- pear/mail_mime: ^1.10
- pear/net_url2: ^2.2
Requires (Dev)
- phpdocumentor/phpdocumentor: ^2.8
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-23 08:27:35 UTC
README
这是一个已废弃的Azure SDK for PHP的分支,它只关注将服务总线引入PHP。这个分支不支持表、块、媒体服务、管理。
在代码清理后运行了所有单元测试,但仍有几个未通过。这基本上是一个进行中的工作 - 请帮助我们测试这个库/SDK。
特性
- 服务总线
- 队列:创建、列出和删除队列;发送、接收、解锁和删除消息
- 主题:创建、列出和删除主题;创建、列出和删除订阅;发送、接收、解锁和删除消息;创建、列出和删除规则
入门指南
注意
建议使用Composer包管理器来解决问题依赖。
使用方法
入门指南
在使用库调用任何Microsoft Azure API之前,必须执行以下四个基本步骤。
-
首先,包含自动加载脚本
require_once "vendor/autoload.php";
-
包含您将要使用的命名空间。
要创建任何Microsoft Azure服务客户端,您需要使用
ServicesBuilder
类use AzureServiceBus\Common\ServicesBuilder;
要处理异常,您需要
use AzureServiceBus\Common\ServiceException;
-
要实例化服务客户端,您还需要一个有效的连接字符串。格式如下
-
要访问实时存储服务(表、块、队列)
DefaultEndpointsProtocol=[http|https];AccountName=[yourAccount];AccountKey=[yourKey]
-
要访问模拟存储
UseDevelopmentStorage=true
-
要访问服务总线
Endpoint=[yourEndpoint];SharedSecretIssuer=[yourWrapAuthenticationName];SharedSecretValue=[yourWrapPassword]
其中端点通常是
https://[yourNamespace].servicebus.windows.net
的格式。 -
要访问服务管理API
SubscriptionID=[yourSubscriptionId];CertificatePath=[filePathToYourCertificate]
-
-
实例化一个"REST代理" - 这是给定服务的可用调用的包装器。
-
对于服务总线
$serviceBusRestProxy = ServicesBuilder::getInstance()->createServiceBusService($connectionString);
-
服务总线队列
当前的PHP服务总线API仅支持ACS连接字符串。目前,您需要使用PowerShell创建一个新的ACS服务总线命名空间。首先,确保您已安装Azure PowerShell,然后在PowerShell命令提示符下运行
Add-AzureAccount # this will sign you in New-AzureSBNamespace -CreateACSNamespace $true -Name 'mytestbusname' -Location 'West US' -NamespaceType 'Messaging'
如果成功,您将在PowerShell输出中获取连接字符串。如果您使用它时出现连接错误,并且连接字符串看起来像Endpoint=sb://...,请将其更改为Endpoint=https://...
创建队列
try { $queueInfo = new QueueInfo("myqueue"); // Create queue. $serviceBusRestProxy->createQueue($queueInfo); } catch(ServiceException $e){ $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />"; }
发送消息
要将消息发送到服务总线队列,您的应用程序将调用ServiceBusRestProxy->sendQueueMessage
方法。发送到(并从)服务总线队列的消息是BrokeredMessage
类的实例。
try { // Create message. $message = new BrokeredMessage(); $message->setBody("my message"); // Send message. $serviceBusRestProxy->sendQueueMessage("myqueue", $message); } catch(ServiceException $e){ $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />"; }
接收消息
从队列接收消息的主要方法是使用ServiceBusRestProxy->receiveQueueMessage
方法。消息可以以两种不同的模式接收:ReceiveAndDelete
(在读取时将消息标记为已消费)和PeekLock
(锁定消息一段时间,但不会删除)。
下面的示例演示了如何使用PeekLock
模式(非默认模式)接收和处理的示例。
try { // Set the receive mode to PeekLock (default is ReceiveAndDelete). $options = new ReceiveMessageOptions(); $options->setPeekLock(true); // Receive message. $message = $serviceBusRestProxy->receiveQueueMessage("myqueue", $options); echo "Body: ".$message->getBody()."<br />"; echo "MessageID: ".$message->getMessageId()."<br />"; // *** Process message here *** // Delete message. $serviceBusRestProxy->deleteMessage($message); } catch(ServiceException $e){ $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />"; }
服务总线主题
创建主题
try { // Create topic. $topicInfo = new TopicInfo("mytopic"); $serviceBusRestProxy->createTopic($topicInfo); } catch(ServiceException $e){ $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />"; }
使用默认(MatchAll)过滤器创建订阅
try { // Create subscription. $subscriptionInfo = new SubscriptionInfo("mysubscription"); $serviceBusRestProxy->createSubscription("mytopic", $subscriptionInfo); } catch(ServiceException $e){ $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />"; }
向主题发送消息
发送到服务总线主题的消息是BrokeredMessage
类的实例。
try { // Create message. $message = new BrokeredMessage(); $message->setBody("my message"); // Send message. $serviceBusRestProxy->sendTopicMessage("mytopic", $message); } catch(ServiceException $e){ $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />"; }
从主题接收消息
从订阅接收消息的主要方式是使用 ServiceBusRestProxy->receiveSubscriptionMessage 方法。接收到的消息可以在两种不同的模式下工作:ReceiveAndDelete(默认模式)和类似于服务总线队列的 PeekLock。
以下示例演示了如何使用 ReceiveAndDelete 模式(默认模式)接收和处理消息。
try { // Set receive mode to PeekLock (default is ReceiveAndDelete) $options = new ReceiveMessageOptions(); $options->setReceiveAndDelete(); // Get message. $message = $serviceBusRestProxy->receiveSubscriptionMessage("mytopic", "mysubscription", $options); echo "Body: ".$message->getBody()."<br />"; echo "MessageID: ".$message->getMessageId()."<br />"; } catch(ServiceException $e){ $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />"; }