URL-адрес абсолютного запроса HTTP (S) в служебной шине Azure

Я пытаюсь настроить базовое подключение к служебной шине Azure с помощью PHP и не могу заставить его работать. Я получаю ошибку:

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

Я не понимаю, где это идет не так. Кто-нибудь есть идеи, что я могу сделать, чтобы предотвратить эту ошибку?

1

Решение

На основании комментариев here, кажется, вы получаете эту ошибку, потому что вы используете более старый способ подключения к Azure Service Bus. Пожалуйста, используйте Shared Access Signature на основе строки подключения, которую можно получить на портале Azure. Это должно быть в следующем формате:

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

Из комментариев:

Привет Мартин, спасибо за отзыв. Вы правы, связь
Строка в этом примере использует старый формат ACS, а портал
создает строки, использующие новый токен Shared Access Signature (см.
https://msdn.microsoft.com/lib… для получения дополнительной информации). Я получу это
Тема обновлена ​​как можно скорее.

Вы должны иметь возможность просто заменить новую строку подключения из
портал. Убедитесь, что он в правильном формате. Так должно быть
что-то вроде

$ connectionString =
«Конечная точка = .servicebus.windows.net; SharedAccessKeyName = RootManageSharedAccessKey; SharedAccessKey =»;

0

Другие решения

Это не так в PHP SDK. В настоящее время в Azure SDK для PHP реализована служебная шина с пространством имен ACS. Но по умолчанию портал и Powershell создают служебную шину в пространстве имен SAS.

Чтобы использовать Azure SDK для 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 ее можно найти на классическом портале.

Между тем, Microsoft не сказала, что использование классического портала в виде строки подключения не рекомендуется.

0

По вопросам рекламы [email protected]