Service Bus-köer, -ämnen och -prenumerationerService Bus queues, topics, and subscriptions

Microsoft Azure Service Bus stöder en uppsättning molnbaserade, meddelande inriktad mellanprogram teknik, som tillförlitlig message Queuing- och varaktiga Publicera/prenumerera på meddelanden.Microsoft Azure Service Bus supports a set of cloud-based, message-oriented middleware technologies including reliable message queuing and durable publish/subscribe messaging. Dessa ”hanterade” meddelandefunktioner kan betraktas som frikopplade meddelandefunktioner som har stöd för Publicera / prenumerera, temporal Frikoppling och scenarier med hjälp av Service Bus messaging arbetsbelastningen för belastningsutjämning.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. Frikopplad kommunikation har många fördelar: klienter och servrar kan till exempel ansluta efter behov och utföra åtgärder på ett asynkront sätt.Decoupled communication has many advantages; for example, clients and servers can connect as needed and perform their operations in an asynchronous fashion.

Meddelandeentiteter som utgör kärnan i meddelandefunktionerna i Service Bus är köer, ämnen och prenumerationer och regler/åtgärder.The messaging entities that form the core of the messaging capabilities in Service Bus are queues, topics and subscriptions, and rules/actions.

KöerQueues

Köer erbjuder First In, först ut (FIFO) meddelandeleverans till en eller flera konkurrerande konsumenter.Queues offer First In, First Out (FIFO) message delivery to one or more competing consumers. Det vill säga mottagare vanligtvis tar emot och bearbetar meddelanden i den ordning som de har lagts till i kön, och endast en meddelandekonsument tar emot och bearbetar varje meddelande.That is, receivers typically receive and process messages in the order in which they were added to the queue, and only one message consumer receives and processes each message. En stor fördel med köer är att uppnå ”temporal Frikoppling” av programkomponenter.A key benefit of using queues is to achieve "temporal decoupling" of application components. Med andra ord behöver producenter (avsändare) och konsumenter (mottagare) inte skicka och ta emot meddelanden på samma gång, eftersom meddelanden lagras varaktigt i kön.In other words, the producers (senders) and consumers (receivers) do not have to be sending and receiving messages at the same time, because messages are stored durably in the queue. Dessutom behöver producenten inte vänta tills ett svar från konsumenten för att kunna fortsätta bearbetningen och skicka meddelanden.Furthermore, the producer does not have to wait for a reply from the consumer in order to continue to process and send messages.

En relaterad fördel är ”belastningsutjämning”, vilket gör att producenter och konsumenter kan skicka och ta emot meddelanden med olika hastigheter.A related benefit is "load leveling," which enables producers and consumers to send and receive messages at different rates. I många program varierar systembelastningen med tiden. men är den bearbetningstid som krävs för varje arbetsenhet vanligtvis konstant.In many applications, the system load varies over time; however, the processing time required for each unit of work is typically constant. Medlingen meddelandeproducenter och konsumenter med hjälp av en kö innebär att den konsumerande appen endast har konfigureras för att kunna hantera genomsnittlig belastning i stället för hög belastning.Intermediating message producers and consumers with a queue means that the consuming application only has to be provisioned to be able to handle average load instead of peak load. Köns djup växer och dras samman allt eftersom den inkommande belastningen varierar.The depth of the queue grows and contracts as the incoming load varies. Den här funktionen sparar direkt pengar avseende mängden infrastruktur som krävs för att underhålla programbelastningen.This capability directly saves money with regard to the amount of infrastructure required to service the application load. När belastningen ökar kan fler arbetsprocesser läggas till att läsa från kön.As the load increases, more worker processes can be added to read from the queue. Varje meddelande bearbetas bara av en av arbetsprocesserna.Each message is processed by only one of the worker processes. Dessutom kan den här pull-baserade belastningsutjämning, för optimal användning av worker-datorer även om worker-datorer skiljer sig åt vad gäller processorkraft, eftersom de hämta meddelanden med den högsta överföringshastighet.Furthermore, this pull-based load balancing allows for optimum use of the worker computers even if the worker computers differ with regard to processing power, as they pull messages at their own maximum rate. Det här mönstret kallas ofta för ett ”konkurrerande konsument”-mönster.This pattern is often termed the "competing consumer" pattern.

Med hjälp av köer till mellanliggande mellan meddelandeproducenter och -konsumenter innehåller en inbyggd lösa kopplingar mellan komponenterna.Using queues to intermediate between message producers and consumers provides an inherent loose coupling between the components. Eftersom producenter och konsumenter inte är medvetna om varandra, kan en konsument uppgraderas utan någon effekt på producenten.Because producers and consumers are not aware of each other, a consumer can be upgraded without having any effect on the producer.

Skapa köerCreate queues

Du skapar köer med hjälp av den Azure-portalen, PowerShell, CLI, eller Resource Manager-mallar.You create queues using the Azure portal, PowerShell, CLI, or Resource Manager templates. Du sedan skicka och ta emot meddelanden med en QueueClient objekt.You then send and receive messages using a QueueClient object.

Läs snabbt hur du skapar en kö, och sedan skicka och ta emot meddelanden till och från kön i den snabbstarter för varje metod.To quickly learn how to create a queue, then send and receive messages to and from the queue, see the quickstarts for each method. En mer detaljerad genomgång om hur du använder köer kan se Kom igång med Service Bus-köer.For a more in-depth tutorial on how to use queues, see Get started with Service Bus queues.

Ett fungerande exempel finns i BasicSendReceiveUsingQueueClient exempel på GitHub.For a working sample, see the BasicSendReceiveUsingQueueClient sample on GitHub.

Ta emot lägenReceive modes

Du kan ange två olika lägen där Service Bus tar emot meddelanden: ReceiveAndDelete eller PeekLock.You can specify two different modes in which Service Bus receives messages: ReceiveAndDelete or PeekLock. I den ReceiveAndDelete läge, Mottagningsåtgärden är inleveransen, det vill säga när Service Bus tar emot begäran, den markerar meddelandet som Förbrukat och tillbaka till programmet.In the ReceiveAndDelete mode, the receive operation is single-shot; that is, when Service Bus receives the request, it marks the message as being consumed and returns it to the application. ReceiveAndDelete läge är den enklaste modellen och fungerar bäst för scenarier där programmet kan tolerera icke-bearbetning av ett meddelande om ett fel inträffar.ReceiveAndDelete mode is the simplest model and works best for scenarios in which the application can tolerate not processing a message if a failure occurs. Tänk dig ett scenario där konsumenten utfärdar en receive-begäran och sedan kraschar innan bearbetningen för att förstå det här scenariot.To understand this scenario, consider a scenario in which the consumer issues the receive request and then crashes before processing it. Eftersom Service Bus markerar meddelandet som Förbrukat när programmet startas om och börjar förbruka meddelanden igen, kommer den ha missat meddelandet som förbrukades innan kraschen.Because Service Bus marks the message as being consumed, when the application restarts and begins consuming messages again, it will have missed the message that was consumed prior to the crash.

I PeekLock läge, Mottagningsåtgärden blir två steg, vilket gör det möjligt att stödprogram som inte tolererar att saknas.In PeekLock mode, the receive operation becomes two-stage, which makes it possible to support applications that cannot tolerate missing messages. När Service Bus tar emot begäran, det upp nästa meddelande som ska förbrukas, låser det för att förhindra att andra användare från att ta emot den och tillbaka det till programmet.When Service Bus receives the 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. När programmet har slutfört behandlingen av meddelandet (eller lagrar den på ett tillförlitligt sätt för framtida bearbetning), den är klar det andra steget i processen genom att anropa CompleteAsync för det mottagna meddelandet.After the application finishes processing the message (or stores it reliably for future processing), it completes the second stage of the receive process by calling CompleteAsync on the received message. När Service Bus ser den CompleteAsync anrop, markerar den meddelandet som Förbrukat.When Service Bus sees the CompleteAsync call, it marks the message as being consumed.

Om programmet inte kan bearbeta meddelandet av någon anledning, kan det anropa den AbandonAsync metod för det mottagna meddelandet (i stället för CompleteAsync).If the application is unable to process the message for some reason, it can call the AbandonAsync method on the received message (instead of CompleteAsync). Den här metoden gör det möjligt för Service Bus låser upp meddelandet och gör det tillgängligt att tas emot igen, antingen av samma konsument eller av en annan konkurrerande konsument.This method enables Service Bus to unlock the message and make it available to be received again, either by the same consumer or by another competing consumer. Det finns en tidsgräns som är associerade med låset och om programmet inte kan bearbeta meddelandet innan timeout för lås går ut (till exempel om programmet kraschar), kommer Service Bus låser upp meddelandet och gör det tillgängligt och kan tas emot igen () för det andra i stort sett utför en AbandonAsync åtgärden som standard).Secondly, there is a timeout associated with the lock 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 and makes it available to be received again (essentially performing an AbandonAsync operation by default).

I händelse av att programmet kraschar efter behandlingen av meddelandet, men innan de CompleteAsync begäran har utfärdats, meddelandet once till programmet när den startas om.In the event that the application crashes after processing the message, but before the CompleteAsync request is issued, the message is redelivered to the application when it restarts. Den här processen kallas ofta minst när bearbetning, det vill säga varje meddelande bearbetas minst en gång.This process is often called At Least Once processing; that is, each message is processed at least once. I vissa situationer kan dock samma meddelande levereras.However, in certain situations the same message may be redelivered. Om scenariot inte tolererar duplicerad bearbetning, och sedan ytterligare logik krävs i programmet för att upptäcka dubbletter, som kan uppnås utifrån den MessageId egenskapen för meddelandet, vilket är konstant över leveransförsök.If the scenario cannot tolerate duplicate processing, then additional logic is required in the application to detect duplicates, which can be achieved based upon the MessageId property of the message, which remains constant across delivery attempts. Den här funktionen kallas exakt en gång bearbetning.This feature is known as Exactly Once processing.

Ämnen och prenumerationerTopics and subscriptions

Till skillnad från köer, där varje meddelande bearbetas av en enskild konsument ämnen och prenumerationer tillhandahålla en en-till-många-kommunikation i en förpublicering/prenumeration mönster.In contrast to queues, in which each message is processed by a single consumer, topics and subscriptions provide a one-to-many form of communication, in a publish/subscribe pattern. Användbart för att skala till flera olika mottagare, varje publicerat meddelande görs tillgänglig för varje prenumeration som har registrerats med ämnet.Useful for scaling to large numbers of recipients, each published message is made available to each subscription registered with the topic. Meddelanden skickas till ett ämne och levereras till en eller flera associerade prenumerationer, beroende på filterregler som kan ställas in på basis av per prenumeration.Messages are sent to a topic and delivered to one or more associated subscriptions, depending on filter rules that can be set on a per-subscription basis. Prenumerationer kan använda ytterligare filter för att begränsa de meddelanden som de vill ha.The subscriptions can use additional filters to restrict the messages that they want to receive. Meddelanden skickas till ett ämne på samma sätt som de skickas till en kö, men meddelanden tas inte emot från ämnet direkt.Messages are sent to a topic in the same way they are sent to a queue, but messages are not received from the topic directly. I stället tas de emot från prenumerationer.Instead, they are received from subscriptions. En ämnesprenumeration liknar en virtuell kö som tar emot kopior av meddelanden som skickas till ämnet.A topic subscription resembles a virtual queue that receives copies of the messages that are sent to the topic. Meddelanden tas emot från en prenumeration identiskt sätt som de tas emot från en kö.Messages are received from a subscription identically to the way they are received from a queue.

Skicka meddelande funktionerna i en kö mappas direkt till ett ämne genom jämförelse och dess funktioner för meddelande-tar emot mappar till en prenumeration.By way of comparison, the message-sending functionality of a queue maps directly to a topic and its message-receiving functionality maps to a subscription. Bland annat kan den här funktionen innebär att prenumerationer stöder samma mönster som beskrivs i det här avsnittet avseende köer: konkurrerande konsument, temporal Frikoppling, belastningsutjämning och belastningsutjämning.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.

Skapa ämnen och prenumerationerCreate topics and subscriptions

Skapa ett ämne liknar skapar en kö, enligt beskrivningen i föregående avsnitt.Creating a topic is similar to creating a queue, as described in the previous section. Du sedan skickar meddelanden med den TopicClient klass.You then send messages using the TopicClient class. Om du vill ta emot meddelanden, skapar du en eller flera prenumerationer till ämnet.To receive messages, you create one or more subscriptions to the topic. Liknar köer, meddelanden tas emot från en prenumeration med hjälp av en SubscriptionClient objekt i stället för en QueueClient objekt.Similar to queues, messages are received from a subscription using a SubscriptionClient object instead of a QueueClient object. Skapa prenumerationsklient, skicka namnet på ämnet, namnet på prenumerationen och (frivilligt) receive-läge som parametrar.Create the subscription client, passing the name of the topic, the name of the subscription, and (optionally) the receive mode as parameters.

För en fullständig fungerar exemplet finns i den BasicSendReceiveUsingTopicSubscriptionClient exempel på GitHub.For a full working example, see the BasicSendReceiveUsingTopicSubscriptionClient sample on GitHub.

Regler och åtgärderRules and actions

Meddelanden som har specifika egenskaper måste bearbetas på olika sätt i många scenarier.In many scenarios, messages that have specific characteristics must be processed in different ways. Om du vill aktivera den här bearbetningen kan du konfigurera prenumerationer för att hitta meddelanden som har önskade egenskaper och utför vissa ändringar av dessa egenskaper.To enable this processing, you can configure subscriptions to find messages that have desired properties and then perform certain modifications to those properties. Du kan bara kopiera en delmängd av de här meddelandena till virtuella prenumerationskön när Service Bus-prenumerationer visas alla meddelanden som skickas till ämnet.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. Den här filtreringen åstadkoms med hjälp av prenumerationsfilter.This filtering is accomplished using subscription filters. Sådana ändringar kallas filteråtgärder.Such modifications are called filter actions. När en prenumeration har skapats kan du ange ett filteruttryck som körs med egenskaperna för meddelandet, både systemegenskaperna (till exempel etikett) och egenskaper för anpassade program (till exempel StoreName.) Filteruttrycket SQL är valfritt i det här fallet; utan ett SQL-filteruttryck utförs något filter som definieras för en prenumeration på alla meddelanden för den aktuella prenumerationen.When a subscription is created, you can supply a filter expression that operates on the properties of the message, both the system properties (for example, Label) and custom application properties (for example, StoreName.) The SQL filter expression is optional in this case; without a SQL filter expression, any filter action defined on a subscription will be performed on all the messages for that subscription.

För en fullständig fungerar exemplet finns i den TopicSubscriptionWithRuleOperationsSample exempel på GitHub.For a full working example, see the TopicSubscriptionWithRuleOperationsSample sample on GitHub.

Mer information om möjliga filtervärden finns i dokumentationen för den SqlFilter och SqlRuleAction klasser.For more information about possible filter values, see the documentation for the SqlFilter and SqlRuleAction classes.

Nästa stegNext steps

Mer information och exempel på hur du använder Service Bus-meddelanden finns i följande avancerade ämnen:For more information and examples of using Service Bus messaging, see the following advanced topics: