我正在尝试使用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 />";
}
?>
我不明白这是哪里出错的。任何人都知道如何防止这个错误?
答案 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名称空间中创建服务总线后,您可以在经典门户网站中找到它。
与此同时,微软并未表示不推荐使用连接字符串形式的经典门户网站。