Szybki Start: jak używać tematów Service Bus i subskrypcji w języku PHPQuickstart: How to use Service Bus topics and subscriptions with PHP

W tym artykule pokazano, jak używać tematów i subskrypcji Service Bus.This article shows you how to use Service Bus topics and subscriptions. Przykłady są zapisywane w języku PHP i korzystają z zestawu Azure SDK dla języka PHP.The samples are written in PHP and use the Azure SDK for PHP. Omówione scenariusze obejmują:The scenarios covered include:

  • Tworzenie tematów i subskrypcjiCreating topics and subscriptions
  • Tworzenie filtrów subskrypcjiCreating subscription filters
  • Wysyłanie komunikatów do tematuSending messages to a topic
  • Otrzymywanie komunikatów z subskrypcjiReceiving messages from a subscription
  • Usuwanie tematów i subskrypcjiDeleting topics and subscriptions

Wymagania wstępnePrerequisites

  1. Subskrypcja platformy Azure.An Azure subscription. Do wykonania kroków tego samouczka potrzebne jest konto platformy Azure.To complete this tutorial, you need an Azure account. Możesz aktywować korzyści dla subskrybentów programu Visual Studio lub MSDN lub utworzyć bezpłatne konto.You can activate your Visual Studio or MSDN subscriber benefits or sign up for a free account.

  2. Wykonaj kroki opisane w przewodniku szybki start: użyj Azure Portal, aby utworzyć temat Service Bus i subskrypcje w temacie w celu utworzenia przestrzeni nazw Service Bus i pobrania parametrów połączenia.Follow steps in the Quickstart: Use the Azure portal to create a Service Bus topic and subscriptions to the topic to create a Service Bus namespace and get the connection string.

    Uwaga

    W tym przewodniku szybki start utworzysz temat i subskrypcję tematu przy użyciu języka php .You will create a topic and a subscription to the topic by using PHP in this quickstart.

Tworzenie aplikacji języka PHPCreate a PHP application

Jedynym wymaganiem do tworzenia aplikacji w języku PHP, która uzyskuje dostęp do Blob service platformy Azure, jest odwołanie do klas w zestawie Azure SDK dla języka PHP z poziomu kodu.The only requirement for creating a PHP application that accesses the Azure Blob service is to reference classes in the Azure SDK for PHP from within your code. Możesz użyć dowolnych narzędzi programistycznych do utworzenia aplikacji lub Notatnika.You can use any development tools to create your application, or Notepad.

Uwaga

W instalacji PHP musi być zainstalowane i włączone rozszerzenie OpenSSL .Your PHP installation must also have the OpenSSL extension installed and enabled.

W tym artykule opisano sposób korzystania z funkcji usługi, które mogą być wywoływane lokalnie w aplikacji w języku PHP lub w kodzie uruchomionym w ramach roli sieci Web, roli procesu roboczego lub witryny internetowej platformy Azure.This article describes how to use service features that can be called within a PHP application locally, or in code running within an Azure web role, worker role, or website.

Pobierz biblioteki klienckie platformy AzureGet the Azure client libraries

Instalowanie przez układaczInstall via Composer

  1. Utwórz plik o nazwie composer.js w folderze głównym projektu i Dodaj do niego następujący kod:Create a file named composer.json in the root of your project and add the following code to it:

    {
      "require": {
        "microsoft/windowsazure": "*"
      }
    }
    
  2. Pobierz [Composer. PHAR] [Composer-PHAR] w katalogu głównym projektu.Download [composer.phar][composer-phar] in your project root.

  3. Otwórz wiersz polecenia i wykonaj następujące polecenie w katalogu głównym projektuOpen a command prompt and execute the following command in your project root

    php composer.phar install
    

Skonfiguruj aplikację do używania Service BusConfigure your application to use Service Bus

Aby używać interfejsów API Service Bus:To use the Service Bus APIs:

  1. Odwołuje się do pliku automatycznej ładowarki przy użyciu instrukcji require_once .Reference the autoloader file using the require_once statement.
  2. Odwołuje się do dowolnych klas, które mogą być używane.Reference any classes you might use.

Poniższy przykład pokazuje, jak uwzględnić plik automatycznej ładowarki i odwołać się do klasy ServiceBusService .The following example shows how to include the autoloader file and reference the ServiceBusService class.

Uwaga

W tym przykładzie (i innych przykładach w tym artykule) założono, że zainstalowano biblioteki klienckie PHP dla systemu Azure przez układacz.This example (and other examples in this article) assumes you have installed the PHP Client Libraries for Azure via Composer. Jeśli biblioteki zostały zainstalowane ręcznie lub jako pakiet php, należy odwołać się do pliku automatycznej ładowarki windowsazure. php .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;

W poniższych przykładach require_once instrukcja jest zawsze wyświetlana, ale przywoływane są tylko klasy niezbędne do wykonania tego przykładu.In the following examples, the require_once statement is always shown, but only the classes necessary for the example to execute are referenced.

Skonfiguruj połączenie Service BusSet up a Service Bus connection

Aby utworzyć wystąpienie klienta Service Bus, należy najpierw dysponować prawidłowymi parametrami połączenia w tym formacie:To instantiate a Service Bus client, you must first have a valid connection string in this format:

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

Gdzie Endpoint jest zazwyczaj format https://[yourNamespace].servicebus.windows.net .Where Endpoint is typically of the format https://[yourNamespace].servicebus.windows.net.

Aby utworzyć dowolnego klienta usługi platformy Azure, należy użyć ServicesBuilder klasy.To create any Azure service client, you must use the ServicesBuilder class. Oto co możesz zrobić:You can:

  • Przekaż parametry połączenia bezpośrednio do niego.Pass the connection string directly to it.
  • Użyj CloudConfigurationManager (CCM) , aby sprawdzić wiele zewnętrznych źródeł parametrów połączenia:Use the CloudConfigurationManager (CCM) to check multiple external sources for the connection string:
    • Domyślnie jest on dostarczany z obsługą jednego zewnętrznego źródła — zmienne środowiskowe.By default it comes with support for one external source - environmental variables.
    • Możesz dodać nowe źródła, rozszerzając klasę ConnectionStringSource.You can add new sources by extending the ConnectionStringSource class.

W przedstawionych tutaj przykładach parametry połączenia są przekazywane bezpośrednio.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);

Tworzenie tematuCreate a topic

Można wykonywać operacje zarządzania dla Service Bus tematów za pośrednictwem ServiceBusRestProxy klasy.You can perform management operations for Service Bus topics via the ServiceBusRestProxy class. ServiceBusRestProxyObiekt jest konstruowany za pośrednictwem ServicesBuilder::createServiceBusService metody fabryki z odpowiednimi parametrami połączenia, które hermetyzują uprawnienia tokenu do zarządzania nim.A ServiceBusRestProxy object is constructed via the ServicesBuilder::createServiceBusService factory method with an appropriate connection string that encapsulates the token permissions to manage it.

Poniższy przykład pokazuje, jak utworzyć wystąpienie obiektu ServiceBusRestProxy i wywołać, ServiceBusRestProxy->createTopic Aby utworzyć temat o nazwie mytopic w MySBNamespace przestrzeni nazw:The following example shows how to instantiate a ServiceBusRestProxy and call ServiceBusRestProxy->createTopic to create a topic named mytopic within a MySBNamespace namespace:

require_once 'vendor/autoload.php';

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

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

try {
    // Create topic.
    $topicInfo = new TopicInfo("mytopic");
    $serviceBusRestProxy->createTopic($topicInfo);
}
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 />";
}

Uwaga

Możesz użyć listTopics metody dla obiektów, ServiceBusRestProxy Aby sprawdzić, czy temat o określonej nazwie już istnieje w przestrzeni nazw usługi.You can use the listTopics method on ServiceBusRestProxy objects to check if a topic with a specified name already exists within a service namespace.

Tworzenie subskrypcjiCreate a subscription

Subskrypcje tematów są również tworzone za pomocą ServiceBusRestProxy->createSubscription metody.Topic subscriptions are also created with the ServiceBusRestProxy->createSubscription method. Subskrypcje są nazywane i mogą zawierać opcjonalny filtr, który ogranicza zestaw komunikatów przesyłany do wirtualnej kolejki subskrypcji.Subscriptions are named and can have an optional filter that restricts the set of messages passed to the subscription's virtual queue.

Tworzenie subskrypcji z filtrem domyślnym (MatchAll)Create a subscription with the default (MatchAll) filter

Jeśli podczas tworzenia nowej subskrypcji nie zostanie określony żaden filtr, zostanie użyty filtr MatchAll (domyślnie).If no filter is specified when a new subscription is created, the MatchAll filter (default) is used. Gdy filtr MatchAll jest używany, wszystkie komunikaty opublikowane w temacie są umieszczane w kolejce wirtualnej subskrypcji.When the MatchAll filter is used, all messages published to the topic are placed in the subscription's virtual queue. Poniższy przykład tworzy subskrypcję o nazwie mysubscription i używa domyślnego filtru MatchAll .The following example creates a subscription named mysubscription and uses the default MatchAll filter.

require_once 'vendor/autoload.php';

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

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

try {
    // Create subscription.
    $subscriptionInfo = new SubscriptionInfo("mysubscription");
    $serviceBusRestProxy->createSubscription("mytopic", $subscriptionInfo);
}
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 />";
}

Tworzenie subskrypcji z filtramiCreate subscriptions with filters

Można również ustawiać filtry pozwalające określić, które komunikaty wysyłane do tematu powinny znajdować się w subskrypcji określonego tematu.You can also set up filters that enable you to specify which messages sent to a topic should appear within a specific topic subscription. Najbardziej elastycznym typem filtru obsługiwanym przez subskrypcje jest obiekt sqlfilter, który IMPLEMENTUJE podzestaw standardu SQL92.The most flexible type of filter supported by subscriptions is the SqlFilter, which implements a subset of SQL92. Filtry SQL działają na właściwościach komunikatów, które są publikowane do tematu.SQL filters operate on the properties of the messages that are published to the topic. Aby uzyskać więcej informacji na temat elementu sqlfilters, zobacz sqlfilter. Sqlexpression Property.For more information about SqlFilters, see SqlFilter.SqlExpression Property.

Uwaga

Każda reguła w ramach subskrypcji przetwarza niezależnie wiadomości przychodzące, dodając do niej komunikaty wynikowe.Each rule on a subscription processes incoming messages independently, adding their result messages to the subscription. Ponadto każda nowa subskrypcja ma obiekt reguły domyślnej z filtrem, który dodaje wszystkie komunikaty z tematu do subskrypcji.In addition, each new subscription has a default Rule object with a filter that adds all messages from the topic to the subscription. Aby odbierać tylko komunikaty zgodne z filtrem, należy usunąć regułę domyślną.To receive only messages matching your filter, you must remove the default rule. Można usunąć regułę domyślną przy użyciu ServiceBusRestProxy->deleteRule metody.You can remove the default rule by using the ServiceBusRestProxy->deleteRule method.

Poniższy przykład tworzy subskrypcję o nazwie HighMessages przy użyciu sqlfilter , który wybiera tylko komunikaty o właściwości niestandardowej MessageNumber większej niż 3.The following example creates a subscription named HighMessages with a SqlFilter that only selects messages that have a custom MessageNumber property greater than 3. Zobacz wysyłanie komunikatów do tematu, Aby uzyskać informacje na temat dodawania właściwości niestandardowych do komunikatów.See Send messages to a topic for information about adding custom properties to messages.

$subscriptionInfo = new SubscriptionInfo("HighMessages");
$serviceBusRestProxy->createSubscription("mytopic", $subscriptionInfo);

$serviceBusRestProxy->deleteRule("mytopic", "HighMessages", '$Default');

$ruleInfo = new RuleInfo("HighMessagesRule");
$ruleInfo->withSqlFilter("MessageNumber > 3");
$ruleResult = $serviceBusRestProxy->createRule("mytopic", "HighMessages", $ruleInfo);

Ten kod wymaga użycia dodatkowej przestrzeni nazw: WindowsAzure\ServiceBus\Models\SubscriptionInfo .This code requires the use of an additional namespace: WindowsAzure\ServiceBus\Models\SubscriptionInfo.

Podobnie Poniższy przykład tworzy subskrypcję o nazwie LowMessages SqlFilter , która tylko wybiera komunikaty o MessageNumber Właściwości mniejszej lub równej 3.Similarly, the following example creates a subscription named LowMessages with a SqlFilter that only selects messages that have a MessageNumber property less than or equal to 3.

$subscriptionInfo = new SubscriptionInfo("LowMessages");
$serviceBusRestProxy->createSubscription("mytopic", $subscriptionInfo);

$serviceBusRestProxy->deleteRule("mytopic", "LowMessages", '$Default');

$ruleInfo = new RuleInfo("LowMessagesRule");
$ruleInfo->withSqlFilter("MessageNumber <= 3");
$ruleResult = $serviceBusRestProxy->createRule("mytopic", "LowMessages", $ruleInfo);

Teraz, gdy wiadomość jest wysyłana do mytopic tematu, jest zawsze dostarczana do odbiorców, którzy zasubskrybują mysubscription subskrypcję, i wybiórczo dostarczane do nadawców subskrybowanych przez HighMessages LowMessages subskrypcje i (w zależności od zawartości wiadomości).Now, when a message is sent to the mytopic topic, it is always delivered to receivers subscribed to the mysubscription subscription, and selectively delivered to receivers subscribed to the HighMessages and LowMessages subscriptions (depending upon the message content).

Wysyłanie komunikatów do tematuSend messages to a topic

Aby wysłać komunikat do Service Bus tematu, aplikacja wywołuje ServiceBusRestProxy->sendTopicMessage metodę.To send a message to a Service Bus topic, your application calls the ServiceBusRestProxy->sendTopicMessage method. Poniższy kod przedstawia sposób wysyłania komunikatu do mytopic tematu utworzonego wcześniej w MySBNamespace przestrzeni nazw usługi.The following code shows how to send a message to the mytopic topic 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->sendTopicMessage("mytopic", $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 />";
}

Komunikaty wysyłane do tematów usługi Service Bus są wystąpieniami klasy BrokeredMessage.Messages sent to Service Bus topics are instances of the BrokeredMessage class. Obiekty BrokeredMessage mają zestaw standardowych właściwości i metod, a także właściwości, których można użyć do przechowywania niestandardowych właściwości specyficznych dla aplikacji.BrokeredMessage objects have a set of standard properties and methods, as well as properties that can be used to hold custom application-specific properties. Poniższy przykład pokazuje, jak wysłać pięć wiadomości testowych do mytopic tematu utworzonego wcześniej.The following example shows how to send five test messages to the mytopic topic previously created. setPropertyMetoda jest używana do dodawania niestandardowej właściwości ( MessageNumber ) do poszczególnych komunikatów.The setProperty method is used to add a custom property (MessageNumber) to each message. MessageNumberWartość właściwości różni się w zależności od poszczególnych komunikatów (można użyć tej wartości, aby określić, które subskrypcje otrzymują, jak pokazano w sekcji Tworzenie subskrypcji ):The MessageNumber property value varies on each message (you can use this value to determine which subscriptions receive it, as shown in the Create a subscription section):

for($i = 0; $i < 5; $i++){
    // Create message.
    $message = new BrokeredMessage();
    $message->setBody("my message ".$i);

    // Set custom property.
    $message->setProperty("MessageNumber", $i);

    // Send message.
    $serviceBusRestProxy->sendTopicMessage("mytopic", $message);
}

Tematy usługi Service Bus obsługują maksymalny rozmiar komunikatu 256 KB w warstwie Standardowa i 1 MB w warstwie Premium.Service Bus topics support a maximum message size of 256 KB in the Standard tier and 1 MB in the Premium tier. Nagłówek, który zawiera standardowe i niestandardowe właściwości aplikacji, może mieć maksymalny rozmiar 64 KB.The header, which includes the standard and custom application properties, can have a maximum size of 64 KB. Nie ma żadnego limitu liczby komunikatów w temacie, ale jest ograniczenie całkowitego rozmiaru komunikatów przechowywanych przez temat.There is no limit on the number of messages held in a topic but there is a cap on the total size of the messages held by a topic. Górny limit rozmiaru tematu wynosi 5 GB.This upper limit on topic size is 5 GB. Aby uzyskać więcej informacji na temat przydziałów, zobacz Service Bus przydziały.For more information about quotas, see Service Bus quotas.

Odbieranie komunikatów z subskrypcjiReceive messages from a subscription

Najlepszym sposobem odbierania komunikatów z subskrypcji jest użycie ServiceBusRestProxy->receiveSubscriptionMessage metody.The best way to receive messages from a subscription is to use a ServiceBusRestProxy->receiveSubscriptionMessage method. Komunikaty mogą być odbierane w dwóch różnych trybach: ReceiveAndDelete i PeekLock.Messages can be received in two different modes: ReceiveAndDelete and PeekLock. Ustawienie domyślne to PeekLock.PeekLock is the default.

W przypadku używania trybu ReceiveAndDelete odbieranie jest operacją pojedynczego zrzutu. Oznacza to, że kiedy usługa Service Bus odbiera żądanie odczytu komunikatu w subskrypcji, oznacza komunikat jako wykorzystywany i zwraca go do aplikacji.When using the ReceiveAndDelete mode, receive is a single-shot operation; that is, when Service Bus receives a read request for a message in a subscription, it marks the message as being consumed and returns it to the application. Tryb ReceiveAndDelete * jest najprostszym modelem i najlepiej sprawdza się w scenariuszach, w których aplikacja może tolerować nieprzetwarzanie komunikatu w przypadku wystąpienia błędu.ReceiveAndDelete * mode is the simplest model and works best for scenarios in which an application can tolerate not processing a message when a failure occurs. Aby to zrozumieć, rozważmy scenariusz, w którym konsument wystawia żądanie odbioru, a następnie ulega awarii przed jego przetworzeniem.To understand this, consider a scenario in which the consumer issues the receive request and then crashes before processing it. Ponieważ Service Bus oznaczył komunikat jako używany, wtedy, gdy aplikacja zostanie ponownie uruchomiona i rozpocznie korzystanie z komunikatów, zostanie pominięty komunikat, który był używany przed awarią.Because Service Bus has marked the message as being consumed, then when the application restarts and begins consuming messages again, it has missed the message that was consumed prior to the crash.

W domyślnym trybie PeekLock otrzymywanie komunikatu staje się operacją dwuetapową, co umożliwia obsługę aplikacji, które nie mogą tolerować brakujących komunikatów.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. Gdy usługa Service Bus odbiera żądanie, znajduje następny komunikat do wykorzystania, blokuje go w celu uniemożliwienia innym klientom odebrania go i zwraca go do aplikacji.When Service Bus receives a request, it finds the next message to be consumed, locks it to prevent other consumers receiving it, and then returns it to the application. Gdy aplikacja zakończy przetwarzanie komunikatu (lub zapisuje ją w sposób niezawodny w przyszłości), kończy drugi etap procesu odbierania, przekazując odebrany komunikat do 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. Gdy Service Bus widzi deleteMessage wywołanie, oznacza komunikat jako używany i usunąć go z kolejki.When Service Bus sees the deleteMessage call, it marks the message as being consumed and remove it from the queue.

Poniższy przykład pokazuje, jak odbierać i przetwarzać komunikat przy użyciu trybu PeekLock (tryb domyślny).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 receive mode to PeekLock (default is ReceiveAndDelete)
    $options = new ReceiveMessageOptions();
    $options->setPeekLock();

    // Get message.
    $message = $serviceBusRestProxy->receiveSubscriptionMessage("mytopic", "mysubscription", $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 "Deleting message...<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 />";
}

Instrukcje: obsługa awarii aplikacji i nieczytelnych komunikatówHow to: handle application crashes and unreadable messages

Usługa Service Bus zapewnia funkcję ułatwiającą bezpieczne odzyskiwanie w razie błędów w aplikacji lub trudności z przetwarzaniem komunikatu.Service Bus provides functionality to help you gracefully recover from errors in your application or difficulties processing a message. Jeśli aplikacja odbiornika nie może przetworzyć komunikatu z jakiegoś powodu, może wywołać unlockMessage metodę dla odebranego komunikatu (zamiast deleteMessage metody).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). Powoduje Service Bus odblokowywanie komunikatu w kolejce i udostępnienie go do odebrania przez tę samą aplikację wykorzystującą lub przez inną aplikację, która korzysta z aplikacji.It causes 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.

Istnieje również limit czasu skojarzony z komunikatem zablokowanym w kolejce i jeśli aplikacja nie może przetworzyć komunikatu przed upływem limitu czasu blokady (na przykład jeśli awaria aplikacji), Service Bus odblokować komunikat automatycznie i udostępnić go do ponownego odebrania.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 unlocks the message automatically and make it available to be received again.

W przypadku awarii aplikacji po przetworzeniu komunikatu, ale przed deleteMessage wystawieniem żądania, komunikat zostanie ponownie dostarczony do aplikacji po jej ponownym uruchomieniu.In the event that the application crashes after processing the message but before the deleteMessage request is issued, then the message is redelivered to the application when it restarts. Ten typ przetwarzania jest często wywoływany co najmniej raz podczas przetwarzania; oznacza to, że każdy komunikat jest przetwarzany co najmniej raz, ale w pewnych sytuacjach może zostać ponownie dostarczony ten sam komunikat.This type of processing 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. Jeśli w scenariuszu nie można tolerować zduplikowanego przetwarzania, deweloperzy aplikacji powinni dodać do aplikacji dodatkową logikę obsługującą duplikowanie komunikatów.If the scenario cannot tolerate duplicate processing, then application developers should add additional logic to applications to handle duplicate message delivery. Jest to często osiągane przy użyciu getMessageId metody komunikatu, która pozostaje stała między kolejnymi próbami dostarczenia.It is often achieved using the getMessageId method of the message, which remains constant across delivery attempts.

Usuwanie tematów i subskrypcjiDelete topics and subscriptions

Aby usunąć temat lub subskrypcję, użyj ServiceBusRestProxy->deleteTopic ServiceBusRestProxy->deleteSubscripton odpowiednio metod lub.To delete a topic or a subscription, use the ServiceBusRestProxy->deleteTopic or the ServiceBusRestProxy->deleteSubscripton methods, respectively. Usunięcie tematu powoduje również usunięcie subskrypcji, które są zarejestrowane z tematem.Deleting a topic also deletes any subscriptions that are registered with the topic.

Poniższy przykład pokazuje, jak usunąć temat o nazwie mytopic i jego zarejestrowanych subskrypcjach.The following example shows how to delete a topic named mytopic and its registered subscriptions.

require_once 'vendor/autoload.php';

use WindowsAzure\ServiceBus\ServiceBusService;
use WindowsAzure\ServiceBus\ServiceBusSettings;
use WindowsAzure\Common\ServiceException;

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

try {
    // Delete topic.
    $serviceBusRestProxy->deleteTopic("mytopic");
}
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 />";
}

Korzystając z deleteSubscription metody, można niezależnie usunąć subskrypcję:By using the deleteSubscription method, you can delete a subscription independently:

$serviceBusRestProxy->deleteSubscription("mytopic", "mysubscription");

Uwaga

Za pomocą eksploratora Service Busmożna zarządzać zasobami Service Bus.You can manage Service Bus resources with Service Bus Explorer. Eksplorator Service Bus umożliwia użytkownikom łączenie się z przestrzenią nazw Service Bus i administrowanie jednostkami obsługi komunikatów w prosty sposób.The Service Bus Explorer allows users to connect to a Service Bus namespace and administer messaging entities in an easy manner. Narzędzie zapewnia zaawansowane funkcje, takie jak funkcja importowania/eksportowania lub możliwość testowania tematów, kolejek, subskrypcji, usług przekazywania, centrów powiadomień i centrów zdarzeń.The tool provides advanced features like import/export functionality or the ability to test topic, queues, subscriptions, relay services, notification hubs and events hubs.

Następne krokiNext steps

Aby uzyskać więcej informacji, zobacz kolejki, tematy i subskrypcje.For more information, see Queues, topics, and subscriptions.