Azure服务总线

时间:2016-07-01 08:44:52

标签: php azure servicebus

我正在尝试使用PHP设置Azure的Service Bus的基本连接,但无法使其正常工作。我收到错误:

1: HTTP_Request2 needs an absolute HTTP(S) request URL, 'sb://mynamespace.servicebus.windows.net/myqueue/messages' given

这是我正在尝试运行的代码:

<?php
    require_once '../vendor/autoload.php';

    use WindowsAzure\Common\ServicesBuilder;
    use WindowsAzure\Common\ServiceException;
    use WindowsAzure\ServiceBus\Models\BrokeredMessage;

    // Create Service Bus REST proxy.
    $connectionString = "Endpoint=sb://mynamespace.servicebus.windows.net/;SharedSecretIssuer=owner;SharedSecretValue=[MyVal]";
    $serviceBusRestProxy = ServicesBuilder::getInstance()->createServiceBusService($connectionString);

    try {
        // Create message.
        $message = new BrokeredMessage();
        $message->setBody("my message");

        // Send message.
        $serviceBusRestProxy->sendQueueMessage("myqueue", $message); // this is the line that causes the error
    }
    catch(Exception $e){
        // Handle exception based on error codes and messages.
        // Error codes and messages are here: 
        // http://msdn.microsoft.com/library/windowsazure/hh780775
        $code = $e->getCode();
        $error_message = $e->getMessage();
        echo $code.": ".$error_message."<br />";
    }
?>

我不明白这是哪里出错的。任何人都知道如何防止这个错误?

2 个答案:

答案 0 :(得分:0)

根据评论here,您似乎收到此错误,因为您使用的是旧方式连接到Azure Service Bus。请使用可从Azure门户获取的基于Shared Access Signature的连接字符串。它应采用以下格式:

$connectionString = "Endpoint=<namespacename>.servicebus.windows.net;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=<your_key_from_the_portal>";

来自评论:

  

嗨,马丁,谢谢你的反馈。你是对的,连接   此示例中的字符串使用旧的ACS格式,而门户网站   生成使用较新的共享访问签名令牌的字符串(请参阅   https://msdn.microsoft.com/lib ...了解更多信息)。我会得到这个   主题尽快更新。

     

您应该只能替换新的连接字符串   门户网站。确保格式正确。它应该是   

之类的东西      

$ connectionString =   “端点= .servicebus.windows.net; SharedAccessKeyName = RootManageSharedAccessKey; SharedAccessKey =”;

答案 1 :(得分:0)

PHP SDK中没有错。目前,Azure SDK for PHP实现了具有ACS命名空间的服务总线。但默认情况下,门户网站和Powershell在SAS命名空间中创建服务总线。

要使用Azure SDK for PHP处理服务总线,您需要在ACS命名空间中创建服务总线服务器。您可以参考https://blogs.msdn.microsoft.com/servicebus/2014/09/03/change-to-azure-service-bus-portal-default-authentication-mechanism-for-service-bus-namespaces-now-sas/了解更多信息。

此外,从最后一段开始,我们可以看到:

  

在服务总线中仍然完全支持ACS,并且在可预见的将来

在ACS名称空间中创建服务总线后,您可以在经典门户网站中找到它。

与此同时,微软并未表示不推荐使用连接字符串形式的经典门户网站。