moston/azure-sdk-php-fork-servicebus

这是服务总线的PHP Azure SDK的一个分支

dev-main 2024-03-12 13:16 UTC

This package is auto-updated.

Last update: 2024-09-12 14:26:31 UTC


README

这是一个现在已废弃的Azure SDK for PHP的分支,它仅专注于将服务总线引入PHP。这个分支不支持表格、Blob、媒体服务、管理。

在代码清理之后,所有单元测试都已运行,但仍有几个未通过。这基本上是一个正在进行中的项目 - 请帮助我们测试这个库/SDK。

功能

  • 服务总线
    • 队列:创建、列出和删除队列;发送、接收、解锁和删除消息
    • 主题:创建、列出和删除主题;创建、列出和删除订阅;发送、接收、解锁和删除消息;创建、列出和删除规则

入门指南

注意

解决依赖项的推荐方法是使用Composer包管理器安装它们。

使用方法

入门指南

在使用库调用任何Microsoft Azure API之前,必须执行以下四个基本步骤。

  • 首先,包含自动加载脚本

    require_once "vendor/autoload.php";
  • 包含您将要使用的命名空间。

    要创建任何Microsoft Azure服务客户端,您需要使用ServicesBuilder

    use AzureServiceBus\Common\ServicesBuilder;

    要处理异常,您需要

    use AzureServiceBus\Common\ServiceException;
  • 要实例化服务客户端,您还需要一个有效的连接字符串。格式为

    • 用于访问实时存储服务(表格、Blob、队列)

      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 />";
}