PHP ile Service Bus kuyruklarını kullanmaHow to use Service Bus queues with PHP

Bu öğreticide, bir Service Bus kuyruğundaki iletileri alıp ileti göndermek için PHP uygulamalarının nasıl oluşturulacağını öğrenin.In this tutorial, you learn how to create PHP applications to send messages to and receive messages from a Service Bus queue.

ÖnkoşullarPrerequisites

  1. Azure aboneliği.An Azure subscription. Bu öğreticiyi tamamlamak için bir Azure hesabınızın olması gerekir.To complete this tutorial, you need an Azure account. Etkinleştirebilir, MSDN abone Avantajlarınızı veya kaydolun bir ücretsiz bir hesap.You can activate your MSDN subscriber benefits or sign up for a free account.
  2. Çalışmak için bir kuyruk yoksa, izleyeceğiniz adımlar Service Bus kuyruğuna oluşturmak için Azure portalını kullanın makalenin bir kuyruk oluşturun.If you don't have a queue to work with, follow steps in the Use Azure portal to create a Service Bus queue article to create a queue.
    1. Hızlı Okuma genel bakış Service Bus kuyrukları.Read the quick overview of Service Bus queues.

    2. Hizmet veri yolu oluşturma ad alanı.Create a Service Bus namespace.

    3. Alma bağlantı dizesi.Get the connection string.

      Not

      Oluşturacağınız bir kuyruk Bu öğreticide PHP kullanarak Service Bus ad alanında.You will create a queue in the Service Bus namespace by using PHP in this tutorial.

  3. PHP için Azure SDKAzure SDK for PHP

PHP uygulaması oluşturmaCreate a PHP application

Sınıflarda başvuran Azure Blob hizmete erişen bir PHP uygulaması oluşturmak için tek gereksinim olmasıdır PHP için Azure SDK'sı gelen kod içinde.The only requirement for creating a PHP application that accesses the Azure Blob service is the referencing of classes in the Azure SDK for PHP from within your code. Herhangi bir geliştirme aracı, uygulama veya not defteri oluşturmak için kullanabilirsiniz.You can use any development tools to create your application, or Notepad.

Not

PHP yüklemenizi de olmalıdır OpenSSL uzantısı yüklenir ve etkinleştirilir.Your PHP installation must also have the OpenSSL extension installed and enabled.

Bu kılavuzda, yerel olarak PHP uygulaması içinde veya bir Azure web rolü, çalışan rolü veya Web sitesi içinde çalışan kod çağrılabilen hizmet özelliklerini kullanır.In this guide, you will use service features, which can be called from within a PHP application locally, or in code running within an Azure web role, worker role, or website.

Azure istemci kitaplıkları AlGet the Azure client libraries

Oluşturucu yüklemeInstall via Composer

  1. Adlı bir dosya oluşturun composer.json projenizin kökünde ve aşağıdaki kodu ekleyin:Create a file named composer.json in the root of your project and add the following code to it:

    {
      "require": {
        "microsoft/azure-storage": "*"
      }
    }
    
  2. İndirme [composer.phar] composer-phar proje kökünüze içinde.Download composer.phar in your project root.

  3. Bir komut istemi açın ve proje kökünde aşağıdaki komutu yürütünOpen a command prompt and execute the following command in your project root

    php composer.phar install
    

Alternatif olarak Git [Azure Storage PHP istemci Kitaplığı] php-sdk-github kaynak kodu kopyalamak için GitHub üzerindeki.Alternatively go to the Azure Storage PHP Client Library on GitHub to clone the source code.

Service Bus hizmetini kullanmak için uygulamanızı yapılandırmaConfigure your application to use Service Bus

Service Bus kuyruğu API'leri kullanmak için aşağıdakileri yapın:To use the Service Bus queue APIs, do the following:

  1. Otomatik Yükleyici dosyasını kullanarak başvuru require_once require_once deyimi.Reference the autoloader file using the require_once statement.
  2. Tüm sınıflar kullanabileceğinize başvuru.Reference any classes you might use.

Aşağıdaki örnekte, başvuru ve otomatik yükleyici dosyasını içerecek şekilde gösterilmektedir ServicesBuilder sınıfı.The following example shows how to include the autoloader file and reference the ServicesBuilder class.

Not

Bu örnekte (ve diğer örnekleri bu makaledeki) Oluşturucusu aracılığıyla Azure için PHP istemci kitaplıkları yüklü olduğunu varsayar.This example (and other examples in this article) assumes you have installed the PHP Client Libraries for Azure via Composer. El ile veya bir ARMUTLU paketi olarak kitaplıkların yüklü değilse, başvurmalıdır WindowsAzure.php onarıldığında dosya.If you installed the libraries manually or as a PEAR package, you must reference the WindowsAzure.php autoloader file.

require_once 'vendor/autoload.php';
use WindowsAzure\Common\ServicesBuilder;

Aşağıdaki örneklerde require_once ifade her zaman gösterilir, ancak yalnızca örnek yürütmek gereken sınıfların başvurulur.In the examples below, the require_once statement will always be shown, but only the classes necessary for the example to execute are referenced.

Service Bus bağlantı kurmaSet up a Service Bus connection

Service Bus istemci oluşturmak için önce geçerli bir bağlantı dizesi şu biçimde olmalıdır:To instantiate a Service Bus client, you must first have a valid connection string in this format:

Endpoint=[yourEndpoint];SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[Primary Key]

Burada Endpoint genellikle şu biçimdedir [yourNamespace].servicebus.windows.net.Where Endpoint is typically of the format [yourNamespace].servicebus.windows.net.

Herhangi bir Azure hizmeti istemcisi oluşturmak için kullanmanız gerekir ServicesBuilder sınıfı.To create any Azure service client, you must use the ServicesBuilder class. Şunları yapabilirsiniz:You can:

  • Doğrudan bağlantı dizesini geçirin.Pass the connection string directly to it.
  • Kullanım CloudConfigurationManager (CCM) bağlantı dizesi için dış kaynaklardan denetlemek için:Use the CloudConfigurationManager (CCM) to check multiple external sources for the connection string:
    • Varsayılan olarak, bir dış kaynak - ortam değişkenleri için destek gelirBy default it comes with support for one external source - environmental variables
    • Genişleterek yeni kaynaklar ekleyebilirsiniz ConnectionStringSource sınıfıYou can add new sources by extending the ConnectionStringSource class

Burada özetlenen örnekler için bağlantı dizesi doğrudan geçirilir.For the examples outlined here, the connection string is passed directly.

require_once 'vendor/autoload.php';

use WindowsAzure\Common\ServicesBuilder;

$connectionString = "Endpoint=[yourEndpoint];SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[Primary Key]";

$serviceBusRestProxy = ServicesBuilder::getInstance()->createServiceBusService($connectionString);

Bir kuyruk oluşturmaCreate a queue

Service Bus kuyruklarına yönelik yönetim işlemlerini gerçekleştirebilirsiniz ServiceBusRestProxy sınıfı.You can perform management operations for Service Bus queues via the ServiceBusRestProxy class. A ServiceBusRestProxy nesnesi aracılığıyla oluşturulduğunda ServicesBuilder::createServiceBusService belirteci yönetme izni kapsülleyen bir uygun bir bağlantı dizesi ile fabrika yöntemi.A ServiceBusRestProxy object is constructed via the ServicesBuilder::createServiceBusService factory method with an appropriate connection string that encapsulates the token permissions to manage it.

Aşağıdaki örnek, örneği gösterilmiştir bir ServiceBusRestProxy ve çağrı ServiceBusRestProxy->createQueue adında bir kuyruk oluşturmak için myqueue içinde bir MySBNamespace hizmet ad alanı:The following example shows how to instantiate a ServiceBusRestProxy and call ServiceBusRestProxy->createQueue to create a queue named myqueue within a MySBNamespace service namespace:

require_once 'vendor/autoload.php';

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

// Create Service Bus REST proxy.
$serviceBusRestProxy = ServicesBuilder::getInstance()->createServiceBusService($connectionString);

try    {
    $queueInfo = new QueueInfo("myqueue");

    // Create queue.
    $serviceBusRestProxy->createQueue($queueInfo);
}
catch(ServiceException $e){
    // Handle exception based on error codes and messages.
    // Error codes and messages are here: 
    // https://docs.microsoft.com/rest/api/storageservices/Common-REST-API-Error-Codes
    $code = $e->getCode();
    $error_message = $e->getMessage();
    echo $code.": ".$error_message."<br />";
}

Not

Kullanabileceğiniz listQueues metodunda ServiceBusRestProxy nesneleri belirtilen adda bir kuyruk, bir ad alanı içinde zaten mevcut olup olmadığını denetleyin.You can use the listQueues method on ServiceBusRestProxy objects to check if a queue with a specified name already exists within a namespace.

Kuyruğa ileti göndermeSend messages to a queue

Uygulama çağrılarınızı, bir Service Bus kuyruğuna bir ileti göndermek için ServiceBusRestProxy->sendQueueMessage yöntemi.To send a message to a Service Bus queue, your application calls the ServiceBusRestProxy->sendQueueMessage method. Aşağıdaki kod bir ileti göndermek nasıl gösterir myqueue daha önce oluşturulan kuyruk MySBNamespace hizmet ad alanı.The following code shows how to send a message to the myqueue queue previously created within the MySBNamespace service namespace.

require_once 'vendor/autoload.php';

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

// Create Service Bus REST proxy.
$serviceBusRestProxy = ServicesBuilder::getInstance()->createServiceBusService($connectionString);

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

    // Send message.
    $serviceBusRestProxy->sendQueueMessage("myqueue", $message);
}
catch(ServiceException $e){
    // Handle exception based on error codes and messages.
    // Error codes and messages are here: 
    // https://docs.microsoft.com/rest/api/storageservices/Common-REST-API-Error-Codes
    $code = $e->getCode();
    $error_message = $e->getMessage();
    echo $code.": ".$error_message."<br />";
}

Gönderilen (ve öğesinden alınan) hizmeti kuyrukları örnekleridir Bus iletileri BrokeredMessage sınıfı.Messages sent to (and received from) Service Bus queues are instances of the BrokeredMessage class. BrokeredMessage nesnelerin bir dizi standart yöntemleri ve özel uygulamaya özgü özellikler ve rastgele uygulama verileri gövdesi tutmak için kullanılan özellikleri vardır.BrokeredMessage objects have a set of standard methods and properties that are used to hold custom application-specific properties, and a body of arbitrary application data.

Service Bus kuyrukları, Standart katmanda maksimum 256 KB ve Premium katmanda maksimum 1 MB ileti boyutunu destekler.Service Bus queues support a maximum message size of 256 KB in the Standard tier and 1 MB in the Premium tier. Standart ve özel uygulama özelliklerini içeren üst bilginin maksimum dosya boyutu 64 KB olabilir.The header, which includes the standard and custom application properties, can have a maximum size of 64 KB. Kuyrukta tutulan ileti sayısına ilişkin bir sınır yoktur ancak kuyruk tarafından tutulan iletilerin toplam boyutu için uç sınır vardır.There is no limit on the number of messages held in a queue but there is a cap on the total size of the messages held by a queue. Bu kuyruk boyutu üst sınırı 5 GB'tır.This upper limit on queue size is 5 GB.

Bir kuyruktan ileti almaReceive messages from a queue

En iyi yolu, bir kuyruktan ileti almak için kullanılacak olan bir ServiceBusRestProxy->receiveQueueMessage yöntemi.The best way to receive messages from a queue is to use a ServiceBusRestProxy->receiveQueueMessage method. İleti, iki farklı modda alınabilir: ReceiveAndDelete ve PeekLock.Messages can be received in two different modes: ReceiveAndDelete and PeekLock. PeekLock varsayılan değerdir.PeekLock is the default.

Kullanırken ReceiveAndDelete modunda almak bir tek işlem; diğer bir deyişle, Service Bus kuyruk iletiye yönelik Okuma isteği aldığında, iletiyi kullanılıyor olarak işaretler ve uygulamaya döndürür.When using ReceiveAndDelete mode, receive is a single-shot operation; that is, when Service Bus receives a read request for a message in a queue, it marks the message as being consumed and returns it to the application. ReceiveAndDelete modu, en basit modeldir ve uygulamanın hata oluştuğunda bir iletinin işlenmemesine izin verebileceği senaryolarda en iyi şekilde çalışır.ReceiveAndDelete mode is the simplest model and works best for scenarios in which an application can tolerate not processing a message in the event of a failure. Bu durumu daha iyi anlamak için müşterinin bir alma isteği bildirdiğini ve bu isteğin işlenmeden çöktüğünü varsayın.To understand this, consider a scenario in which the consumer issues the receive request and then crashes before processing it. Service Bus iletiyi kullanılıyor olarak işaretleyeceğinden, uygulama yeniden başlatılıp iletileri tekrar kullanmaya başladığında ardından onu çökmenin öncesinde kullanılan iletiyi atlamış olur.Because Service Bus will have marked the message as being consumed, then when the application restarts and begins consuming messages again, it will have missed the message that was consumed prior to the crash.

Varsayılan PeekLock bir mesaj modu, atlanan iletilere veremeyen uygulamaları desteklemenin mümkün hale getiren bir iki aşamalı işlemi haline gelir.In the default PeekLock mode, receiving a message becomes a two stage operation, which makes it possible to support applications that cannot tolerate missing messages. Service Bus bir istek aldığında, kullanılacak sonraki iletiyi bulur, diğer tüketicilerin iletiyi almasını engellemek için kilitler ve ardından uygulamaya döndürür.When Service Bus receives a request, it finds the next message to be consumed, locks it to prevent other consumers from receiving it, and then returns it to the application. Uygulama iletiyi işlemeyi tamamladıktan sonra (veya güvenilir bir şekilde işlemek üzere depolar sonra) alınan iletinin geçirerek alma işleminin ikinci aşamasını tamamlar ServiceBusRestProxy->deleteMessage.After the application finishes processing the message (or stores it reliably for future processing), it completes the second stage of the receive process by passing the received message to ServiceBusRestProxy->deleteMessage. Service Bus gördüğünde deleteMessage çağrı, bu iletiyi kullanılıyor olarak işaretler ve kuyruktan kaldırın.When Service Bus sees the deleteMessage call, it will mark the message as being consumed and remove it from the queue.

Aşağıdaki örnek almak ve bir iletiyi kullanarak işlemek nasıl gösterir PeekLock modu (varsayılan mod).The following example shows how to receive and process a message using PeekLock mode (the default mode).

require_once 'vendor/autoload.php';

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

// Create Service Bus REST proxy.
$serviceBusRestProxy = ServicesBuilder::getInstance()->createServiceBusService($connectionString);

try    {
    // Set the receive mode to PeekLock (default is ReceiveAndDelete).
    $options = new ReceiveMessageOptions();
    $options->setPeekLock();

    // Receive message.
    $message = $serviceBusRestProxy->receiveQueueMessage("myqueue", $options);
    echo "Body: ".$message->getBody()."<br />";
    echo "MessageID: ".$message->getMessageId()."<br />";

    /*---------------------------
        Process message here.
    ----------------------------*/

    // Delete message. Not necessary if peek lock is not set.
    echo "Message deleted.<br />";
    $serviceBusRestProxy->deleteMessage($message);
}
catch(ServiceException $e){
    // Handle exception based on error codes and messages.
    // Error codes and messages are here:
    // https://docs.microsoft.com/rest/api/storageservices/Common-REST-API-Error-Codes
    $code = $e->getCode();
    $error_message = $e->getMessage();
    echo $code.": ".$error_message."<br />";
}

Uygulama çökmelerini ve okunmayan iletileri gidermeHow to handle application crashes and unreadable messages

Service Bus, uygulamanızda gerçekleşen hataları veya ileti işlenirken oluşan zorlukları rahat bir şekilde ortadan kaldırmanıza yardımcı olmak için işlevsellik sağlar.Service Bus provides functionality to help you gracefully recover from errors in your application or difficulties processing a message. Alıcı uygulamanın iletiyi işlemek için herhangi bir nedenle silemiyor sonra çağırabilirsiniz unlockMessage yöntemi alınan iletide (yerine deleteMessage yöntemi).If a receiver application is unable to process the message for some reason, then it can call the unlockMessage method on the received message (instead of the deleteMessage method). Bu, Service Bus'ın Kuyruktaki iletinin kilidini açmasına ve iletiyi aynı kullanıcı uygulama veya başka bir kullanıcı uygulama tarafından tekrar alınabilir hale neden olur.This will cause Service Bus to unlock the message within the queue and make it available to be received again, either by the same consuming application or by another consuming application.

Ayrıca kuyrukta kilitlenen iletiye ilişkin bir zaman aşımı yoktur ve uygulama önce iletiyi işleyemezse (örneğin, uygulama çökerse) Service Bus otomatik olarak iletinin kilidini açmasına ve hale kilit zaman aşımı dolmadan tekrar kullanılabilir.There is also a timeout associated with a message locked within the queue, and if the application fails to process the message before the lock timeout expires (for example, if the application crashes), then Service Bus will unlock the message automatically and make it available to be received again.

Uygulama iletiyi ancak önce çökmesi durumunda, deleteMessage isteği bildirilmeden, sonra yeniden başlatıldığında ileti uygulamaya yeniden teslim edilebilir.In the event that the application crashes after processing the message but before the deleteMessage request is issued, then the message will be redelivered to the application when it restarts. Buna genellikle denir en az bir kez diğer bir deyişle, her ileti en az bir kez işlenir işleme; ancak belirli durumlarda aynı ileti yeniden teslim edilebilir.This is often called At Least Once processing; that is, each message is processed at least once but in certain situations the same message may be redelivered. Senaryo yinelenen işlemeyi kabul etmiyorsa, sonra ek mantık yinelenen ileti teslimine uygulamaları ekleyerek önerilir.If the scenario cannot tolerate duplicate processing, then adding additional logic to applications to handle duplicate message delivery is recommended. Bu genellikle kullanılmasıdır getMessageId yöntemi iletinin teslim denemeleri arasında sabit kalır.This is often achieved using the getMessageId method of the message, which remains constant across delivery attempts.

Not

Service Bus kaynakları ile yönetebileceğiniz hizmet veri yolu Gezgini.You can manage Service Bus resources with Service Bus Explorer. Hizmet veri yolu Gezgini, bir Service Bus ad alanınıza bağlanın ve mesajlaşma varlıkları kolay bir şekilde yönetmek kullanıcıların sağlar.The Service Bus Explorer allows users to connect to a Service Bus namespace and administer messaging entities in an easy manner. Araç, içeri/dışarı aktarma işlevleri veya konu, kuyruklar, abonelikler, geçiş hizmetleri, bildirim hub'ları ve olay hub'ları test etme olanağı gibi gelişmiş özellikler sağlar.The tool provides advanced features like import/export functionality or the ability to test topic, queues, subscriptions, relay services, notification hubs and events hubs.

Sonraki adımlarNext steps

Service Bus kuyruklarına ilişkin temel bilgileri öğrendiğinize göre artık bkz [kuyruklar, konular ve abonelikler] Queues, topics, and subscriptions daha fazla bilgi için.Now that you've learned the basics of Service Bus queues, see Queues, topics, and subscriptions for more information.

Ayrıca daha fazla bilgi için ziyaret PHP Geliştirici Merkezi.For more information, also visit the PHP Developer Center.