Guida alla programmazione di Hub eventiEvent Hubs programming guide

Questo articolo prende in esame alcuni scenari comuni nella scrittura di codice tramite Hub eventi di Azure e Azure .NET SDK.This article discusses some common scenarios in writing code using Azure Event Hubs and the Azure .NET SDK. Si presuppone una conoscenza preliminare di Hub eventi.It assumes a preliminary understanding of Event Hubs. Per una panoramica sui concetti relativi a Hub eventi, vedere Panoramica di Hub eventi.For a conceptual overview of Event Hubs, see the Event Hubs overview.

Publisher di eventiEvent publishers

L'invio di eventi a un hub eventi viene eseguito tramite una connessione AMQP 1.0 o HTTP POST.You send events to an event hub either using HTTP POST or via an AMQP 1.0 connection. La scelta del protocollo da usare e di quando usarlo dipende dallo scenario specifico.The choice of which to use and when depends on the specific scenario being addressed. Le connessioni AMQP 1.0 sono misurate come connessioni negoziate nel bus di servizio e sono più appropriate in scenari in cui sono frequenti volumi di messaggi più elevati e con requisiti di latenza inferiori, perché offrono un canale di messaggistica persistente.AMQP 1.0 connections are metered as brokered connections in Service Bus and are more appropriate in scenarios with frequent higher message volumes and lower latency requirements, as they provide a persistent messaging channel.

È possibile creare e gestire Hub eventi con la classe NamespaceManager.You can create and manage Event Hubs using the NamespaceManager class. Quando si usano le API gestite da .NET, i costrutti primari per la pubblicazione dei dati in Hub eventi sono le classi EventHubClient e EventData.When using the .NET managed APIs, the primary constructs for publishing data to Event Hubs are the EventHubClient and EventData classes. EventHubClient offre il canale di comunicazione AMQP tramite il quale gli eventi vengono inviati all'hub eventi.EventHubClient provides the AMQP communication channel over which events are sent to the event hub. La classe EventData rappresenta un evento e viene usata per pubblicare i messaggi in un hub eventi.The EventData class represents an event, and is used to publish messages to an event hub. Questa classe include il corpo, alcuni metadati e informazioni di intestazione sull'evento.This class includes the body, some metadata, and header information about the event. Altre proprietà vengono aggiunte all'oggetto EventData quando passa attraverso un hub eventi.Other properties are added to the EventData object as it passes through an event hub.

IntroduzioneGet started

Le classi .NET che supportano Hub eventi fanno parte dell'assembly Microsoft.ServiceBus.dll.The .NET classes that support Event Hubs are provided in the Microsoft.ServiceBus.dll assembly. Il modo più semplice per fare riferimento all'API del bus di servizio e configurare l'applicazione con tutte le dipendenze del bus di servizio consiste nello scaricare il pacchetto NuGet del bus di servizio.The easiest way to reference the Service Bus API and to configure your application with all of the Service Bus dependencies is to download the Service Bus NuGet package. In alternativa, è possibile usare Console di gestione pacchetti in Visual Studio.Alternatively, you can use the Package Manager Console in Visual Studio. A tale scopo, eseguire il comando seguente nella finestra della Console di gestione pacchetti :To do so, issue the following command in the Package Manager Console window:

Install-Package WindowsAzure.ServiceBus

Creare un hub eventiCreate an event hub

È possibile utilizzare la classe NamespaceManager per creare gli hub di eventi.You can use the NamespaceManager class to create Event Hubs. ad esempio:For example:

var manager = new Microsoft.ServiceBus.NamespaceManager("mynamespace.servicebus.windows.net");
var description = manager.CreateEventHub("MyEventHub");

Nella maggior parte dei casi, è consigliabile usare i metodi CreateEventHubIfNotExists per evitare di generare eccezioni se il servizio viene riavviato.In most cases, it is recommended that you use the CreateEventHubIfNotExists methods to avoid generating exceptions if the service restarts. ad esempio:For example:

var description = manager.CreateEventHubIfNotExists("MyEventHub");

Tutte le operazioni di creazione di Hub eventi, tra cui CreateEventHubIfNotExists, richiedono di gestire le autorizzazioni per lo spazio dei nomi in questione.All Event Hubs creation operations, including CreateEventHubIfNotExists, require Manage permissions on the namespace in question. Se si desidera limitare le autorizzazioni delle applicazioni publisher o consumer, è possibile evitare queste chiamate alle operazioni di creazione nel codice di produzione quando si usano credenziali con autorizzazioni limitate.If you want to limit the permissions of your publisher or consumer applications, you can avoid these create operation calls in production code when you use credentials with limited permissions.

La classe EventHubDescription contiene informazioni dettagliate su un hub eventi, tra cui le regole di autorizzazione, l'intervallo di conservazione dei messaggi, gli ID di partizione, lo stato e il percorso.The EventHubDescription class contains details about an event hub, including the authorization rules, the message retention interval, partition IDs, status, and path. È possibile usare questa classe per aggiornare i metadati in un hub eventi.You can use this class to update the metadata on an event hub.

Creare un client di Hub eventiCreate an Event Hubs client

La classe primaria per interagire con Hub eventi è Microsoft.ServiceBus.Messaging.EventHubClient.The primary class for interacting with Event Hubs is Microsoft.ServiceBus.Messaging.EventHubClient. Questa classe fornisce funzionalità di mittente e destinatario.This class provides both sender and receiver capabilities. È possibile creare un'istanza di questa classe usando il metodo Create, come illustrato nell'esempio seguente:You can instantiate this class using the Create method, as shown in the following example:

var client = EventHubClient.Create(description.Path);

Questo metodo usa le informazioni di connessione del bus di servizio nella sezione appSettings del file App.config.This method uses the Service Bus connection information in the App.config file, in the appSettings section. Per un esempio dell'XML di appSettings usato per archiviare le informazioni di connessione del bus di servizio, vedere la documentazione per il metodo Microsoft.ServiceBus.Messaging.EventHubClient.Create(System.String) .For an example of the appSettings XML used to store the Service Bus connection information, see the documentation for the Microsoft.ServiceBus.Messaging.EventHubClient.Create(System.String) method.

È anche possibile creare il client da una stringa di connessione.Another option is to create the client from a connection string. Questa opzione funziona bene quando si usano i ruoli di lavoro di Azure, poiché è possibile archiviare la stringa nelle proprietà di configurazione per il lavoro.This option works well when using Azure worker roles, because you can store the string in the configuration properties for the worker. ad esempio:For example:

EventHubClient.CreateFromConnectionString("your_connection_string");

La stringa di connessione avrà un formato uguale a quello presente nel file App.config per i metodi precedenti:The connection string will be in the same format as it appears in the App.config file for the previous methods:

Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[key]

Infine è anche possibile creare un oggetto EventHubClient da un'istanza di MessagingFactory, come illustrato nell'esempio seguente:Finally, it is also possible to create an EventHubClient object from a MessagingFactory instance, as shown in the following example:

var factory = MessagingFactory.CreateFromConnectionString("your_connection_string");
var client = factory.CreateEventHubClient("MyEventHub");

È importante notare che oggetti EventHubClient aggiuntivi creati da un'istanza di factory di messaggistica riusano la stessa connessione TCP sottostante.It is important to note that additional EventHubClient objects created from a messaging factory instance reuse the same underlying TCP connection. Di conseguenza, questi oggetti prevedono un limite sul lato client per la velocità effettiva.Therefore, these objects have a client-side limit on throughput. Il metodo Create riutilizza una singola factory di messaggistica.The Create method reuses a single messaging factory. Se è necessario molto elevata velocità effettiva di un singolo mittente, è possibile creare più factory di messaggistica e un oggetto EventHubClient factory di messaggistica.If you need very high throughput from a single sender, then you can create multiple message factories and one EventHubClient object from each messaging factory.

Inviare eventi a un hub eventiSend events to an event hub

Gli eventi vengono inviati a un hub eventi tramite la creazione di un'istanza EventData e l'invio di quest'ultima con il metodo Send.You send events to an event hub by creating an EventData instance and sending it via the Send method. Questo metodo accetta un singolo parametro dell'istanza di EventData e lo invia in modo sincrono a un hub eventi.This method takes a single EventData instance parameter and synchronously sends it to an event hub.

Serializzazione degli eventiEvent serialization

La classe EventData ha quattro costruttori di overload che accettano una serie di parametri, ad esempio un oggetto, un serializzatore, una matrice di byte o un flusso.The EventData class has four overloaded constructors that take a variety of parameters, such as an object and serializer, a byte array, or a stream. È inoltre possibile creare un'istanza della classe EventData e impostare il flusso del corpo in un secondo momento.It is also possible to instantiate the EventData class and set the body stream afterwards. Quando si usa JSON con EventDataè possibile usare Encoding.UTF8.GetBytes() per recuperare la matrice di byte per una stringa con codifica JSON.When using JSON with EventData, you can use Encoding.UTF8.GetBytes() to retrieve the byte array for a JSON-encoded string.

Chiave di partizionePartition key

La classe EventData ha una proprietà PartitionKey che consente al mittente di specificare un valore che viene eseguito con hash per produrre un'assegnazione di partizione.The EventData class has a PartitionKey property that enables the sender to specify a value that is hashed to produce a partition assignment. L'uso di una chiave di partizione assicura che tutti gli eventi con la stessa chiave vengano inviati alla stessa partizione nell'hub eventi.Using a partition key ensures that all the events with the same key are sent to the same partition in the event hub. Le chiavi di partizione comuni includono ID sessione utente e ID mittente univoci.Common partition keys include user session IDs and unique sender IDs. La proprietà PartitionKey è facoltativa e può essere specificata quando si usa il metodo Microsoft.ServiceBus.Messaging.EventHubClient.Send(Microsoft.ServiceBus.Messaging.EventData)o Microsoft.ServiceBus.Messaging.EventHubClient.SendAsync(Microsoft.ServiceBus.Messaging.EventData).The PartitionKey property is optional and can be provided when using the Microsoft.ServiceBus.Messaging.EventHubClient.Send(Microsoft.ServiceBus.Messaging.EventData) or Microsoft.ServiceBus.Messaging.EventHubClient.SendAsync(Microsoft.ServiceBus.Messaging.EventData) methods. Se non si specifica un valore per PartitionKey, gli eventi inviati vengono distribuiti alle partizioni tramite un modello round robin.If you do not provide a value for PartitionKey, sent events are distributed to partitions using a round-robin model.

Considerazioni sulla disponibilitàAvailability considerations

L'uso di una chiave di partizione è facoltativo. È consigliabile valutare attentamente se farne uso o meno.Using a partition key is optional, and you should consider carefully whether or not to use one. La chiave di partizione è un'ottima scelta se l'ordine degli eventi è importante.In many cases, using a partition key is a good choice if event ordering is important. Quando si usa una chiave di partizione, queste partizioni richiedono la disponibilità in un singolo nodo. Nel tempo possono verificarsi interruzioni, ad esempio al riavvio dei nodi di calcolo e all'applicazione di patch.When you use a partition key, these partitions require availability on a single node, and outages can occur over time; for example, when compute nodes reboot and patch. Di conseguenza, se si imposta un ID di partizione e per qualche motivo la partizione diventa non disponibile, il tentativo di accedere ai dati della partizione avrà esito negativo.As such, if you set a partition ID and that partition becomes unavailable for some reason, an attempt to access the data in that partition will fail. Se è prioritaria la disponibilità elevata, non specificare alcuna chiave di partizione. In questo caso gli eventi vengono inviati alle partizioni con il modello round robin descritto in precedenza.If high availability is most important, do not specify a partition key; in that case events are sent to partitions using the round-robin model described previously. In questo scenario viene esercitata una scelta esplicita tra disponibilità (nessun ID di partizione) e coerenza (aggiunta di eventi a un ID di partizione).In this scenario, you are making an explicit choice between availability (no partition ID) and consistency (pinning events to a partition ID).

Va anche considerata la gestione dei ritardi nell'elaborazione degli eventi.Another consideration is handling delays in processing events. In alcuni casi è preferibile eliminare i dati e riprovare anziché continuare a provare e mantenere attiva l'elaborazione, poiché ciò può sommare altro ritardo all'elaborazione downstream.In some cases, it might be better to drop data and retry than to try to keep up with processing, which can potentially cause further downstream processing delays. Con i titoli azionari, ad esempio, è consigliabile attendere il completamento dell'aggiornamento dei dati, ma nel caso di una chat in tempo reale o in uno scenario VOIP è preferibile ottenere i dati rapidamente, anche se non sono completi.For example, with a stock ticker it's better to wait for complete up-to-date data, but in a live chat or VOIP scenario you'd rather have the data quickly, even if it isn't complete.

Considerati gli aspetti relativi alla disponibilità, in questi scenari è possibile scegliere una tra le strategie di gestione degli errori seguenti:Given these availability considerations, in these scenarios you might choose one of the following error handling strategies:

  • Arresto (arresto della lettura da Hub eventi fino alla risoluzione del problema)Stop (stop reading from Event Hubs until things are fixed)
  • Eliminazione (i messaggi non sono importanti, eliminarli)Drop (messages aren’t important, drop them)
  • Ripetizione (nuovo tentativo di invio dei messaggi quando possibile)Retry (retry the messages as you see fit)
  • Mancato recapito dei messaggi (usare una coda o un altro hub eventi per evitare il recapito dei soli messaggi che non è possibile elaborare)Dead letter (use a queue or another event hub to dead letter only the messages you couldn’t process)

Per altre informazioni e una discussione sui compromessi tra disponibilità e coerenza, vedere Availability and consistency in Event Hubs (Disponibilità e coerenza in Hub eventi).For more information and a discussion about the trade-offs between availability and consistency, see Availability and consistency in Event Hubs.

Operazioni di invio di eventi in batchBatch event send operations

L'invio di eventi in batch può aumentare la velocità effettiva.Sending events in batches can help increase throughput. Il metodo SendBatch accetta un parametro IEnumerable di tipo EventData e invia l'intero batch come operazione atomica all'hub eventi.The SendBatch method takes an IEnumerable parameter of type EventData and sends the entire batch as an atomic operation to the event hub.

public void SendBatch(IEnumerable<EventData> eventDataList);

Si noti che un singolo batch non deve superare il limite di 256 KB di un evento.Note that a single batch must not exceed the 256 KB limit of an event. Inoltre, ogni messaggio nel batch usa la stessa identità del publisher.Additionally, each message in the batch uses the same publisher identity. È responsabilità del mittente verificare che il batch non superi la dimensione massima dell'evento.It is the responsibility of the sender to ensure that the batch does not exceed the maximum event size. In questo caso, viene generato un errore di invio del client.If it does, a client Send error is generated. È possibile usare il metodo helper EventHubClient.CreateBatch per assicurarsi che il batch non superi i 256 KB.You can use the helper method EventHubClient.CreateBatch to ensure that the batch does not exceed 256 KB. Si ottiene un EventDataBatch vuoto dall'API CreateBatch, quindi si usa TryAdd per aggiungere eventi per costruire il batch.You get an empty EventDataBatch from the CreateBatch API and then use TryAdd to add events to construct the batch. Infine, usare EventDataBatch.ToEnumerable per ottenere gli eventi sottostanti da passare all'API EventHubClient.Send.Finally, use EventDataBatch.ToEnumerable to get the underlying events to pass to the EventHubClient.Send API.

Inviare in modo asincrono e inviare a livello di scalabilitàSend asynchronously and send at scale

È anche possibile inviare eventi a un hub eventi in modo asincrono.You can also send events to an event hub asynchronously. L'invio asincrono può consentire di aumentare la velocità con cui un client può inviare gli eventi.Sending asynchronously can increase the rate at which a client is able to send events. Entrambi i metodi Send e SendBatch sono disponibili nelle versioni asincrone che restituiscono un oggetto Task.Both the Send and SendBatch methods are available in asynchronous versions that return a Task object. Sebbene questa tecnica possa consentire di aumentare la velocità effettiva, può anche provocare l'invio continuo di eventi da parte del client anche in presenza di limitazioni imposte dal servizio Hub eventi e ciò può comportare errori del client o perdita di messaggi, se l'implementazione non avviene correttamente.While this technique can increase throughput, it can also cause the client to continue to send events even while it is being throttled by the Event Hubs service and can result in the client experiencing failures or lost messages if not properly implemented. Inoltre, è possibile usare la proprietà RetryPolicy nel client per controllare le opzioni di ripetizione dei tentativi nel client.In addition, you can use the RetryPolicy property on the client to control client retry options.

Creare un mittente di partizioneCreate a partition sender

Sebbene sia più comune inviare eventi a un hub eventi senza una chiave di partizione, in alcuni casi è possibile inviare gli eventi direttamente a una partizione specifica.Although it is most common to send events to an event hub without a partition key, in some cases you might want to send events directly to a given partition. Ad esempio:For example:

var partitionedSender = client.CreatePartitionedSender(description.PartitionIds[0]);

CreatePartitionedSender restituisce un oggetto EventHubSender che è possibile usare per pubblicare eventi in una partizione specifica dell'hub eventi.CreatePartitionedSender returns an EventHubSender object that you can use to publish events to a specific event hub partition.

Consumer di eventiEvent consumers

Hub eventi dispone di due modelli principali per l'utilizzo di eventi: ricevitori diretti e astrazioni di livello superiore, ad esempio EventProcessorHost.Event Hubs has two primary models for event consumption: direct receivers and higher-level abstractions, such as EventProcessorHost. I ricevitori diretti sono responsabili del coordinamento del proprio accesso alle partizioni in un gruppo di consumer.Direct receivers are responsible for their own coordination of access to partitions within a consumer group. Un gruppo di consumer è una vista (stato, posizione o offset) di un hub eventi partizionato.A consumer group is a view (state, position, or offset) into a partitioned event hub.

Consumer direttoDirect consumer

Il modo più diretto per leggere da una partizione consiste nell'uso della classe EventHubReceiver.The most direct way to read from a partition is to use the EventHubReceiver class. Per creare un'istanza di questa classe, è necessario usare un'istanza della classe EventHubConsumerGroup .To create an instance of this class, you must use an instance of the EventHubConsumerGroup class. Nell'esempio seguente è necessario specificare l'ID di partizione quando si crea il ricevitore per il gruppo di consumer:In the following example, the partition ID must be specified when creating the receiver for the consumer group:

EventHubConsumerGroup group = client.GetDefaultConsumerGroup();
var receiver = group.CreateReceiver(client.GetRuntimeInformation().PartitionIds[0]);

Il metodo CreateReceiver dispone di diversi overload che facilitano il controllo sul lettore creato.The CreateReceiver method has several overloads that facilitate control over the reader being created. Questi metodi includono la specifica di un offset sotto forma di stringa o timestamp e la possibilità di specificare se includere questo offset nel flusso restituito o iniziare dopo di esso.These methods include specifying an offset as either a string or timestamp, and the ability to specify whether to include this specified offset in the returned stream, or start after it. Dopo aver creato il ricevitore, è possibile iniziare a ricevere gli eventi nell'oggetto restituito.After you create the receiver, you can start receiving events on the returned object. Il metodo Receive dispone di quattro overload che controllano i parametri dell'operazione receive, ad esempio le dimensioni di batch e il tempo di attesa.The Receive method has four overloads that control the receive operation parameters, such as batch size and wait time. È possibile usare le versioni asincrone di questi metodi per aumentare la velocità effettiva di un consumer.You can use the asynchronous versions of these methods to increase the throughput of a consumer. Ad esempio:For example:

bool receive = true;
string myOffset;
while(receive)
{
    var message = receiver.Receive();
    myOffset = message.Offset;
    string body = Encoding.UTF8.GetString(message.GetBytes());
    Console.WriteLine(String.Format("Received message offset: {0} \nbody: {1}", myOffset, body));
}

Per una partizione specifica, i messaggi vengono ricevuti nell'ordine in cui sono stati inviati all'hub eventi.With respect to a specific partition, the messages are received in the order in which they were sent to the event hub. L'offset è un token di stringa usato per identificare un messaggio in una partizione.The offset is a string token used to identify a message in a partition.

Si noti che una singola partizione non può avere più di cinque lettori concorrenti connessi in un determinato momento.Note that a single partition cannot have more than 5 concurrent readers connected at any time. Quando i reader si connettono o si disconnettono, le relative sessioni potrebbero rimanere attive per alcuni minuti prima che il servizio riconosca che si sono disconnessi.As readers connect or become disconnected, their sessions might stay active for several minutes before the service recognizes that they have disconnected. In questo intervallo, la riconnessione a una partizione potrebbe non riuscire.During this time, reconnecting to a partition may fail. Per un esempio completo di scrittura di un ricevitore diretto per Hub eventi, vedere l'esempio relativo ai ricevitori diretti per gli hub eventi .For a complete example of writing a direct receiver for Event Hubs, see the Event Hubs Direct Receivers sample.

Host processore di eventiEvent processor host

La classe EventProcessorHost elabora i dati da Hub eventi.The EventProcessorHost class processes data from Event Hubs. È consigliabile usare questa implementazione durante la creazione di reader di eventi sulla piattaforma .NET.You should use this implementation when building event readers on the .NET platform. EventProcessorHost fornisce un ambiente di runtime thread-safe, multiprocesso e sicuro per le implementazioni del processore di eventi che fornisce inoltre la gestione di lease di Checkpoint e la partizione.EventProcessorHost provides a thread-safe, multi-process, safe runtime environment for event processor implementations that also provides checkpointing and partition lease management.

Per usare la classe EventProcessorHost, è possibile implementare IEventProcessor.To use the EventProcessorHost class, you can implement IEventProcessor. Questa interfaccia contiene tre metodi:This interface contains three methods:

Per avviare l'elaborazione di eventi, creare un'istanza EventProcessorHostfornendo i parametri appropriati per l'hub eventi.To start event processing, instantiate EventProcessorHost, providing the appropriate parameters for your event hub. Chiamare quindi RegisterEventProcessorAsync per registrare l'implementazione di IEventProcessor con il runtime.Then, call RegisterEventProcessorAsync to register your IEventProcessor implementation with the runtime. A questo punto, l'host tenta di acquisire un lease per ogni partizione nell'hub eventi tramite un algoritmo "greedy".At this point, the host attempts to acquire a lease on every partition in the event hub using a "greedy" algorithm. Tali lease durano per un determinato intervallo di tempo e quindi devono essere rinnovati.These leases last for a given timeframe and must then be renewed. Appena nuovi nodi, in questo caso istanze di lavoro, passano online, inviano prenotazioni di lease e nel tempo il carico passa tra i nodi man mano che ognuno tenta di acquisire più lease.As new nodes, worker instances in this case, come online, they place lease reservations and over time the load shifts between nodes as each attempts to acquire more leases.

Host processore di eventi

Con il passare del tempo, viene stabilito un equilibrio.Over time, an equilibrium is established. Questa funzionalità dinamica consente il ridimensionamento automatico basato su CPU da applicare ai consumer per la scalabilità verticale e orizzontale.This dynamic capability enables CPU-based autoscaling to be applied to consumers for both scale-up and scale-down. Poiché Hub eventi non ha una conoscenza diretta del numero di messaggi, l'uso medio della CPU è spesso il meccanismo migliore per misurare la scala back-end o di consumer.Because Event Hubs does not have a direct concept of message counts, average CPU utilization is often the best mechanism to measure back end or consumer scale. Se i publisher iniziano a pubblicare più eventi di quelli che i consumer possono elaborare, l'aumento della CPU nei consumer può essere usato per applicare la scalabilità automatica sul numero di istanze di lavoro.If publishers begin to publish more events than consumers can process, the CPU increase on consumers can be used to cause an auto-scale on worker instance count.

La classe EventProcessorHost implementa inoltre un meccanismo di impostazione di checkpoint basato sull'archiviazione di Azure.The EventProcessorHost class also implements an Azure storage-based checkpointing mechanism. Questo meccanismo archivia l'offset per ogni partizione, in modo che ogni consumer possa determinare qual è stato l'ultimo checkpoint per il consumer precedente.This mechanism stores the offset on a per partition basis, so that each consumer can determine what the last checkpoint from the previous consumer was. Man mano che le partizioni passano tra i nodi tramite lease, questo è il meccanismo di sincronizzazione che semplifica lo spostamento del carico.As partitions transition between nodes via leases, this is the synchronization mechanism that facilitates load shifting.

Revoca di publisherPublisher revocation

Oltre alle funzionalità di runtime avanzate di EventProcessorHost, Hub eventi consente anche di revocare i publisher per impedire a publisher specifici di inviare eventi a un hub eventi.In addition to the advanced run-time features of EventProcessorHost, Event Hubs enables publisher revocation in order to block specific publishers from sending event to an event hub. Queste funzionalità sono utili in situazioni in cui il token di un autore è stato compromesso o un aggiornamento software sta causando un comportamento non appropriato.These features are useful if a publisher token has been compromised, or a software update is causing them to behave inappropriately. In queste situazioni, l'identità dell'autore, che fa parte del relativo token di firma di accesso condiviso, può essere bloccata impedendo la pubblicazione di eventi.In these situations, the publisher's identity, which is part of their SAS token, can be blocked from publishing events.

Per altre informazioni sulla revoca di publisher e su come eseguire l'invio a Hub eventi come publisher, vedere l'esempio relativo alla pubblicazione sicura su larga scala in Hub eventi.For more information about publisher revocation and how to send to Event Hubs as a publisher, see the Event Hubs Large Scale Secure Publishing sample.

Passaggi successiviNext steps

Per altre informazioni sugli scenari di Hub eventi, visitare i collegamenti seguenti:To learn more about Event Hubs scenarios, visit these links: