moston / azure-sdk-php-fork-servicebus
This is a fork of the PHP Azure SDK for the service bus
Requires
- php: >=8.1.0
- firebase/php-jwt: ^4.0 || ^5.0 || ^6.0
- guzzlehttp/guzzle: ^7.0
- laminas/laminas-mail: ^2.22
- laminas/laminas-mime: ^2.12
- 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-11-12 14:47:39 UTC
README
This is a fork of now abandoned Azure SDK for PHP which only focuses on bringing Service Bus to PHP. This fork does not have support for Tables, Blobs, Media Services, Management.
All unit tests were run after the code cleanup and few still fail. This is pretty much work in progress - please help us in testing this library/SDK.
Features
- Service Bus
- Queues: create, list and delete queues; send, receive, unlock and delete messages
- Topics: create, list, and delete topics; create, list, and delete subscriptions; send, receive, unlock and delete messages; create, list, and delete rules
Getting Started
Note
The recommended way to resolve dependencies is to install them using the Composer package manager.
Usage
Getting Started
There are four basic steps that have to be performed before you can make a call to any Microsoft Azure API when using the libraries.
-
First, include the autoloader script:
require_once "vendor/autoload.php";
-
Include the namespaces you are going to use.
To create any Microsoft Azure service client you need to use the ServicesBuilder class:
use AzureServiceBus\Common\ServicesBuilder;
To process exceptions you need:
use AzureServiceBus\Common\ServiceException;
-
To instantiate the service client you will also need a valid connection string. The format is:
-
For accessing a live storage service (tables, blobs, queues):
DefaultEndpointsProtocol=[http|https];AccountName=[yourAccount];AccountKey=[yourKey]
-
For accessing the emulator storage:
UseDevelopmentStorage=true
-
For accessing the Service Bus:
Endpoint=[yourEndpoint];SharedSecretIssuer=[yourWrapAuthenticationName];SharedSecretValue=[yourWrapPassword]
Where the Endpoint is typically of the format
https://[yourNamespace].servicebus.windows.net
. -
For accessing Service Management APIs:
SubscriptionID=[yourSubscriptionId];CertificatePath=[filePathToYourCertificate]
-
-
Instantiate a "REST Proxy" - a wrapper around the available calls for the given service.
-
For Service Bus:
$serviceBusRestProxy = ServicesBuilder::getInstance()->createServiceBusService($connectionString);
-
Service Bus Queues
The current PHP Service Bus APIs only support ACS connection strings. You need to use PowerShell to create a new ACS Service Bus namespace at the present time. First, make sure you have Azure PowerShell installed, then in a PowerShell command prompt, run
Add-AzureAccount # this will sign you in New-AzureSBNamespace -CreateACSNamespace $true -Name 'mytestbusname' -Location 'West US' -NamespaceType 'Messaging'
If it is sucessful, you will get the connection string in the PowerShell output. If you get connection errors with it and the conection string looks like Endpoint=sb://..., change it to Endpoint=https://...
Create a Queue
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 />"; }
Send a Message
To send a message to a Service Bus queue, your application will call the ServiceBusRestProxy->sendQueueMessage method. Messages sent to (and received from ) Service Bus queues are instances of the BrokeredMessage class.
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 />"; }
Receive a Message
The primary way to receive messages from a queue is to use a ServiceBusRestProxy->receiveQueueMessage method. Messages can be received in two different modes: ReceiveAndDelete (mark message as consumed on read) and PeekLock (locks message for a period of time, but does not delete).
The example below demonstrates how a message can be received and processed using PeekLock mode (not the default mode).
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 />"; }
Service Bus Topics
Create a Topic
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 />"; }
Create a subscription with the default (MatchAll) filter
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 />"; }
Send a message to a topic
Messages sent to Service Bus topics are instances of the BrokeredMessage class.
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 />"; }
Receive a message from a topic
The primary way to receive messages from a subscription is to use a ServiceBusRestProxy->receiveSubscriptionMessage method. Received messages can work in two different modes: ReceiveAndDelete (the default) and PeekLock similarly to Service Bus Queues.
The example below demonstrates how a message can be received and processed using ReceiveAndDelete mode (the default mode).
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 />"; }