Kolejki, tematy i subskrypcje usługi Service BusService Bus queues, topics, and subscriptions

Azure Service Bus obsługuje zestaw opartych na chmurze technologii oprogramowania pośredniczącego, w tym niezawodnej usługi kolejkowania komunikatów i trwałego przesyłania komunikatów publikowania/subskrybowania.Azure Service Bus supports a set of cloud-based, message-oriented middleware technologies including reliable message queuing and durable publish/subscribe messaging. Te możliwości obsługi komunikatów obsługiwanych przez brokera mogą być traktowane jako funkcje obsługi komunikatów, które obsługują publikowanie-subskrybowanie, oddzielanie danych czasowych i scenariusze równoważenia obciążenia przy użyciu obciążenia Service Bus Messaging.These brokered messaging capabilities can be thought of as decoupled messaging features that support publish-subscribe, temporal decoupling, and load-balancing scenarios using the Service Bus messaging workload. Komunikacja oddzielona ma wiele zalet.Decoupled communication has many advantages. Na przykład klienci i serwery mogą łączyć się w razie potrzeby i wykonywać operacje w sposób asynchroniczny.For example, clients and servers can connect as needed and do their operations in an asynchronous fashion.

Jednostki obsługi komunikatów, które tworzą rdzeń możliwości obsługi komunikatów w Service Bus są kolejkami, tematami i subskrypcjami oraz regułami/akcjami.The messaging entities that form the core of the messaging capabilities in Service Bus are queues, topics and subscriptions, and rules/actions.

KolejkiQueues

Kolejki zapewniają dostarczanie wiadomości najpierw w pierwszej kolejności (FIFO) do jednego lub większej liczby konkurujących klientów.Queues offer First In, First Out (FIFO) message delivery to one or more competing consumers. Oznacza to, że odbiorcy zazwyczaj odbierają i przetwarzają komunikaty w kolejności, w której zostały dodane do kolejki.That is, receivers typically receive and process messages in the order in which they were added to the queue. Tylko jeden odbiorca wiadomości odbiera i przetwarza każdy komunikat.And, only one message consumer receives and processes each message. Kluczową zaletą korzystania z kolejek jest osiągnięcie czasowego oddzielenia składników aplikacji.A key benefit of using queues is to achieve temporal decoupling of application components. Innymi słowy, producenci (nadawcy) i konsumenci (odbiorcy) nie muszą jednocześnie wysyłać i odbierać wiadomości.In other words, the producers (senders) and consumers (receivers) don't have to send and receive messages at the same time. Wynika to z faktu, że komunikaty są przechowywane trwale w kolejce.That's because messages are stored durably in the queue. Ponadto producent nie musi czekać na odpowiedź od konsumenta, aby dalej przetwarzać i wysyłać komunikaty.Furthermore, the producer doesn't have to wait for a reply from the consumer to continue to process and send messages.

Powiązana korzyść to poziom obciążenia, który umożliwia producentom i konsumentom wysyłanie i odbieranie komunikatów przy różnych stawkach.A related benefit is load-leveling, which enables producers and consumers to send and receive messages at different rates. W wielu aplikacjach obciążenie systemu zmienia się w miarę upływu czasu.In many applications, the system load varies over time. Jednak czas przetwarzania wymagany dla każdej jednostki pracy jest zwykle stały.However, the processing time required for each unit of work is typically constant. Producenci komunikatów Intermediating i konsumenci z kolejką oznacza, że zużywana aplikacja musi mieć możliwość obsługi średniego obciążenia zamiast szczytowego obciążenia.Intermediating message producers and consumers with a queue means that the consuming application only has to be able to handle average load instead of peak load. Głębokość kolejki rośnie i zmniejsza się w zależności od zmian obciążenia przychodzącego.The depth of the queue grows and contracts as the incoming load varies. Ta funkcja bezpośrednio zapisuje pieniądze w odniesieniu do wielkości infrastruktury wymaganej do obsługi obciążenia aplikacji.This capability directly saves money with regard to the amount of infrastructure required to service the application load. W miarę wzrostu obciążenia można dodać więcej procesów roboczych do odczytu z kolejki.As the load increases, more worker processes can be added to read from the queue. Każdy komunikat jest przetwarzany tylko przez jeden z procesów roboczych.Each message is processed by only one of the worker processes. Ponadto ta funkcja równoważenia obciążenia opartego na ściąganiu umożliwia optymalne korzystanie z komputerów procesów roboczych, nawet w przypadku, gdy Komputery pracujące w systemie przetwarzają komunikaty ściągania zużywają ich własną maksymalną szybkość.Furthermore, this pull-based load balancing allows for best use of the worker computers even if the worker computers with processing power pull messages at their own maximum rate. Ten wzorzec jest często nazywany wzorcem konkurujących konsumentów.This pattern is often termed the competing consumer pattern.

Używanie kolejek do pośrednich między producentami i konsumentami komunikatów zapewnia nieodłączne, luźne sprzężenie między składnikami.Using queues to intermediate between message producers and consumers provides an inherent loose coupling between the components. Ze względu na to, że producenci i konsumenci nie wiedzą nawzajem, konsument może zostać uaktualniony bez wpływu na producenta.Because producers and consumers aren't aware of each other, a consumer can be upgraded without having any effect on the producer.

Tworzenie kolejekCreate queues

Kolejki można tworzyć przy użyciu szablonów Azure Portal, PowerShell, interfejsu wiersza polecenialub Menedżer zasobów.You can create queues using the Azure portal, PowerShell, CLI, or Resource Manager templates. Następnie wysyłaj i odbieraj komunikaty przy użyciu klientów pisanych w językach C#, Java, Python, JavaScript, phpi Ruby.Then, send and receive messages using clients written in C#, Java, Python, JavaScript, PHP, and Ruby.

Tryby odbieraniaReceive modes

Można określić dwa różne tryby, w których Service Bus odbiera komunikaty.You can specify two different modes in which Service Bus receives messages.

  • Odbierz i Usuń.Receive and delete. W tym trybie, gdy Service Bus otrzyma żądanie od konsumenta, oznacza komunikat jako używany i zwraca go do aplikacji konsumenta.In this mode, when Service Bus receives the request from the consumer, it marks the message as being consumed and returns it to the consumer application. Ten tryb jest najprostszym modelem.This mode is the simplest model. Najlepiej sprawdza się w scenariuszach, w których aplikacja może tolerować nieprzetwarzanie komunikatu w przypadku wystąpienia błędu.It works best for scenarios in which the application can tolerate not processing a message if a failure occurs. Aby zrozumieć ten scenariusz, Rozważmy scenariusz, w którym odbiorca wysyła żądanie odebrania, a następnie ulega awarii przed jego przetworzeniem.To understand this scenario, consider a scenario in which the consumer issues the receive request and then crashes before processing it. Jak Service Bus oznacza komunikat jako używany, aplikacja zacznie zużywać komunikaty po ponownym uruchomieniu.As Service Bus marks the message as being consumed, the application begins consuming messages upon restart. Spowoduje to odrzucenie wiadomości, która była używana przed awarią.It will miss the message that it consumed before the crash.
  • Zablokuj blokadę.Peek lock. W tym trybie operacja odbierania staje się dwuetapowa, co umożliwia obsługę aplikacji, które nie mogą tolerować brakujących komunikatów.In this mode, the receive operation becomes two-stage, which makes it possible to support applications that can't tolerate missing messages.
    1. Znajduje następny komunikat do użycia, blokuje go, aby uniemożliwić innym konsumentom otrzymywanie go, a następnie zwrócić komunikat do aplikacji.Finds the next message to be consumed, locks it to prevent other consumers from receiving it, and then, return the message to the application.

    2. Po zakończeniu przetwarzania komunikatu aplikacja zażąda usługi Service Bus, aby ukończyć drugi etap procesu odbierania.After the application finishes processing the message, it requests the Service Bus service to complete the second stage of the receive process. Następnie usługa oznacza komunikat jako używany.Then, the service marks the message as being consumed.

      Jeśli aplikacja nie może przetworzyć komunikatu z jakiegoś powodu, może zażądać usługi Service Bus, aby porzucić komunikat.If the application is unable to process the message for some reason, it can request the Service Bus service to abandon the message. Service Bus odblokowywanie wiadomości i udostępnienie jej do ponownego odbierania przez tego samego klienta lub przez innego użytkownika konkurującego.Service Bus unlocks the message and makes it available to be received again, either by the same consumer or by another competing consumer. Po drugie, istnieje limit czasu skojarzony z blokadą.Secondly, there's a timeout associated with the lock. Jeśli aplikacja nie będzie przetwarzać komunikatu przed upływem limitu czasu blokady, Service Bus odblokowuje komunikat i udostępni go do ponownego odebrania.If the application fails to process the message before the lock timeout expires, Service Bus unlocks the message and makes it available to be received again.

      Jeśli aplikacja ulegnie awarii po przetworzeniu komunikatu, ale przed zażądaniem usługi Service Bus, aby zakończyć ten komunikat, Service Bus ponownie dostarczy komunikat do aplikacji po jej ponownym uruchomieniu.If the application crashes after it processes the message, but before it requests the Service Bus service to complete the message, Service Bus redelivers the message to the application when it restarts. Ten proces jest często wywoływany co najmniej raz podczas przetwarzania.This process is often called at-least once processing. Oznacza to, że każdy komunikat jest przetwarzany co najmniej jeden raz.That is, each message is processed at least once. Jednak w niektórych sytuacjach ten sam komunikat może zostać dostarczony.However, in certain situations the same message may be redelivered. Jeśli scenariusz nie może tolerować zduplikowanego przetwarzania, Dodaj dodatkową logikę w aplikacji, aby wykryć duplikaty.If your scenario can't tolerate duplicate processing, add additional logic in your application to detect duplicates. Aby uzyskać więcej informacji, zobacz Wykrywanie duplikatów.For more information, see Duplicate detection. Ta funkcja jest znana dokładnie po przetworzeniu.This feature is known as exactly once processing.

      Uwaga

      Aby uzyskać więcej informacji na temat tych dwóch trybów, zobacz rozliczanie operacji odbioru.For more information about these two modes, see Settling receive operations.

Tematy i subskrypcjeTopics and subscriptions

Kolejka umożliwia przetwarzanie komunikatu przez pojedynczego konsumenta.A queue allows processing of a message by a single consumer. W przeciwieństwie do kolejek, tematy i subskrypcje zapewniają formę komunikacji typu "jeden do wielu" w wzorcu publikowania i subskrybowania .In contrast to queues, topics and subscriptions provide a one-to-many form of communication in a publish and subscribe pattern. Jest to przydatne w przypadku skalowania do dużej liczby odbiorców.It's useful for scaling to large numbers of recipients. Każdy opublikowany komunikat jest udostępniany każdej subskrypcji zarejestrowanej w temacie.Each published message is made available to each subscription registered with the topic. Wydawca wysyła komunikat do tematu, a co najmniej jeden subskrybent otrzymuje kopię wiadomości, w zależności od reguł filtru ustawionych w tych subskrypcjach.Publisher sends a message to a topic and one or more subscribers receive a copy of the message, depending on filter rules set on these subscriptions. Subskrypcje mogą używać dodatkowych filtrów, aby ograniczyć liczbę wiadomości, które mają zostać odebrane.The subscriptions can use additional filters to restrict the messages that they want to receive. Wydawcy wysyłają komunikaty do tematu w taki sam sposób, w jaki wysyłają komunikaty do kolejki.Publishers send messages to a topic in the same way that they send messages to a queue. Jednak konsumenci nie odbierają wiadomości bezpośrednio z tematu.But, consumers don't receive messages directly from the topic. Zamiast tego odbiorcy odbierają wiadomości z subskrypcji tematu.Instead, consumers receive messages from subscriptions of the topic. Subskrypcja tematu jest podobna do kolejki wirtualnej, która odbiera kopie komunikatów wysyłanych do tematu.A topic subscription resembles a virtual queue that receives copies of the messages that are sent to the topic. Odbiorcy odbierają wiadomości z subskrypcji identycznie do sposobu, w jaki odbierają komunikaty z kolejki.Consumers receive messages from a subscription identically to the way they receive messages from a queue.

Funkcja wysyłania komunikatów w kolejce mapuje się bezpośrednio do tematu, a jego funkcja otrzymywania komunikatów jest mapowana na subskrypcję.The message-sending functionality of a queue maps directly to a topic and its message-receiving functionality maps to a subscription. Ta funkcja oznacza między innymi, że subskrypcje obsługują te same wzorce opisane wcześniej w tej sekcji, w odniesieniu do kolejek: konkurujących klientów, oddzielenia czasowego, równoważenia obciążenia i równoważenie obciążenia.Among other things, this feature means that subscriptions support the same patterns described earlier in this section with regard to queues: competing consumer, temporal decoupling, load leveling, and load balancing.

Tworzenie tematów i subskrypcjiCreate topics and subscriptions

Tworzenie tematu jest podobne do tworzenia kolejki, zgodnie z opisem w poprzedniej sekcji.Creating a topic is similar to creating a queue, as described in the previous section. Tematy i subskrypcje można tworzyć przy użyciu szablonów Azure Portal, PowerShell, interfejsu wiersza polecenialub Menedżer zasobów.You can create topics and subscriptions using the Azure portal, PowerShell, CLI, or Resource Manager templates. Następnie Wysyłaj komunikaty do tematu i odbieraj komunikaty z subskrypcji przy użyciu klientów utworzonych w językach C#, Java, Python, JavaScript, phpi Ruby.Then, send messages to a topic and receive messages from subscriptions using clients written in C#, Java, Python, JavaScript, PHP, and Ruby.

Reguły i akcjeRules and actions

W wielu scenariuszach komunikaty o określonych cechach muszą być przetwarzane na różne sposoby.In many scenarios, messages that have specific characteristics must be processed in different ways. Aby włączyć to przetwarzanie, można skonfigurować subskrypcje w celu znalezienia komunikatów, które mają żądane właściwości, a następnie wykonać pewne modyfikacje tych właściwości.To enable this processing, you can configure subscriptions to find messages that have desired properties and then perform certain modifications to those properties. Chociaż subskrypcje Service Bus Zobacz wszystkie komunikaty wysłane do tematu, można skopiować tylko podzestaw tych komunikatów do kolejki subskrypcji wirtualnej.While Service Bus subscriptions see all messages sent to the topic, you can only copy a subset of those messages to the virtual subscription queue. To filtrowanie jest realizowane przy użyciu filtrów subskrypcji.This filtering is accomplished using subscription filters. Takie modyfikacje są nazywane akcjami filtrowania.Such modifications are called filter actions. Po utworzeniu subskrypcji można podać wyrażenie filtru, które działa na właściwościach komunikatu.When a subscription is created, you can supply a filter expression that operates on the properties of the message. Właściwości mogą być zarówno właściwościami systemu (na przykład etykieta), jak i właściwościami aplikacji niestandardowych (na przykład StoreName). Wyrażenie filtru SQL jest w tym przypadku opcjonalne.The properties can be both the system properties (for example, Label) and custom application properties (for example, StoreName.) The SQL filter expression is optional in this case. Bez wyrażenia filtru SQL wszystkie akcje filtru zdefiniowane w ramach subskrypcji zostaną wykonane na wszystkich komunikatach dla tej subskrypcji.Without a SQL filter expression, any filter action defined on a subscription will be done on all the messages for that subscription.

Aby uzyskać pełny przykład pracy, zobacz przykład TopicSubscriptionWithRuleOperationsSample w witrynie GitHub.For a full working example, see the TopicSubscriptionWithRuleOperationsSample sample on GitHub.

Aby uzyskać więcej informacji o filtrach, zobacz temat filtry i akcje tematu.For more information about filters, see Topic filters and actions.

Jednostki usługi wiadomości Java (JMS) 2,0Java message service (JMS) 2.0 entities

Następujące jednostki są dostępne za pomocą interfejsu API usługi wiadomości Java (JMS) 2,0.The following entities are accessible through the Java message service (JMS) 2.0 API.

  • Kolejki tymczasoweTemporary queues
  • Tematy tymczasoweTemporary topics
  • Udostępnione trwałe subskrypcjeShared durable subscriptions
  • Nieudostępniane trwałe subskrypcjeUnshared durable subscriptions
  • Udostępnione nietrwałe subskrypcjeShared non-durable subscriptions
  • Nieudostępniane subskrypcje nietrwałeUnshared non-durable subscriptions

Dowiedz się więcej o jednostkach JMS 2,0 i sposobach ich użycia.Learn more about the JMS 2.0 entities and about how to use them.

Następne krokiNext steps

Aby uzyskać więcej informacji i przykłady używania Service Bus Messaging, zobacz następujące tematy zaawansowane:For more information and examples of using Service Bus messaging, see the following advanced topics: