Usare la libreria legacy WindowsAzure.ServiceBus .NET Framework con AMQP 1.0
Nota
Questo articolo è destinato agli utenti esistenti del pacchetto WindowsAzure.ServiceBus che cercano di passare all'uso di AMQP all'interno dello stesso pacchetto. Anche se questo pacchetto continuerà a ricevere correzioni di bug critiche fino al 30 settembre 2026, è consigliabile eseguire l'aggiornamento al nuovo pacchetto Azure.Messaging.ServiceBus , disponibile a partire da novembre 2020 e che supporta AMQP per impostazione predefinita.
Il 30 settembre 2026 verranno ritirati le librerie bus di servizio di Azure SDK WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus e com.microsoft.azure.servicebus, che non sono conformi alle linee guida di Azure SDK. Il supporto del protocollo SBMP verrà terminato, quindi non sarà più possibile usare questo protocollo dopo il 30 settembre 2026. Eseguire la migrazione alle librerie più recenti di Azure SDK, che offrono aggiornamenti critici della sicurezza e funzionalità migliorate, prima di tale data.
Anche se le librerie precedenti possono ancora essere usate oltre il 30 settembre 2026, non riceveranno più il supporto e gli aggiornamenti ufficiali da Microsoft. Per altre informazioni, vedere l'annuncio di ritiro del supporto.
Per impostazione predefinita, il pacchetto WindowsAzure.ServiceBus comunica con il servizio bus di servizio usando un protocollo basato su SOAP dedicato denominato bus di servizio Protocollo di messaggistica (SBMP). Nella versione 2.1 è stato aggiunto il supporto per AMQP 1.0, che è consigliabile usare anziché il protocollo predefinito.
Per usare AMQP 1.0 invece del protocollo predefinito, è necessaria una configurazione esplicita nel bus di servizio stringa di connessione o nei costruttori client tramite l'opzione TransportType. A parte questa modifica, il codice dell'applicazione rimane invariato quando si usa AMQP 1.0.
Esistono alcune funzionalità api non supportate quando si usa AMQP. Queste funzionalità non supportate sono elencate nella sezione Differenze di comportamento. Anche alcune impostazioni di configurazione avanzate assumono un significato differente quando si utilizza AMQP.
Configurare stringa di connessione per l'uso di AMQP 1.0
Aggiungere il stringa di connessione con ;TransportType=Amqp
per indicare al client di stabilire la connessione a bus di servizio usando AMQP 1.0.
ad esempio:
Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=Amqp
Dove namespace
e SAS key
si ottengono dal portale di Azure quando si crea uno spazio dei nomi del bus di servizio. Per altre informazioni, vedere Creare uno spazio dei nomi del bus di servizio usando il portale di Azure.
AMQP su WebSockets
Per usare AMQP su WebSocket, impostare TransportType
nel stringa di connessione su AmqpWebSockets
. Ad esempio: Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=AmqpWebSockets
.
Serializzazione dei messaggi
Quando si usa il protocollo predefinito, il comportamento di serializzazione predefinito della libreria client .NET consiste nell'usare il tipo DataContractSerializer per serializzare un'istanza di BrokeredMessage per il trasporto tra la libreria client e il servizio del bus di servizio. Quando si usa la modalità di trasporto AMQP, la libreria client usa il sistema di tipi AMQP per la serializzazione del messaggio negoziato in un messaggio AMQP. Questa serializzazione consente la ricezione e l'interpretazione dei messaggi da parte di un'applicazione ricevente che è potenzialmente in esecuzione in una piattaforma diversa, ad esempio un'applicazione Java che usa l'API JMS per accedere al bus di servizio.
Quando si crea un'istanza di BrokeredMessage, è possibile specificare al costruttore un oggetto .NET come parametro da usare come corpo del messaggio. Per gli oggetti che possono essere mappati a tipi primitivi AMQP, il corpo viene serializzato in tipi di dati AMQP. Se non è possibile eseguire direttamente il mapping dell'oggetto a un tipo primitivo AMQP, ovvero un tipo personalizzato definito dall'applicazione, l'oggetto viene serializzato tramite DataContractSerializer e i byte serializzati vengono inviati in un messaggio di dati AMQP.
Per semplificare l'interoperabilità con client non .NET, usare solo tipi .NET che possono essere serializzati direttamente in tipi AMQP per il corpo del messaggio. La tabella seguente descrive in modo dettagliato questi tipi e il mapping corrispondente al sistema di tipi AMQP.
Tipo di oggetto del corpo .NET | Tipo AMQP mappato | Tipo di sezione del corpo AMQP |
---|---|---|
bool | boolean | Valore AMQP |
byte | ubyte | Valore AMQP |
ushort | ushort | Valore AMQP |
uint | uint | Valore AMQP |
ulong | ulong | Valore AMQP |
sbyte | byte | Valore AMQP |
short | short | Valore AMQP |
int | int | Valore AMQP |
long | long | Valore AMQP |
float | float | Valore AMQP |
double | double | Valore AMQP |
decimal | decimal128 | Valore AMQP |
char | char | Valore AMQP |
Data/Ora | timestamp | Valore AMQP |
GUID | uuid | Valore AMQP |
byte[] | binary | Valore AMQP |
stringa | stringa | Valore AMQP |
System.Collections.IList | list | Valore AMQP: la raccolta può includere solo gli elementi definiti in questa tabella. |
System.Array | array | Valore AMQP: la raccolta può includere solo gli elementi definiti in questa tabella. |
System.Collections.IDictionary | mappa | Valore AMQP: la raccolta può includere solo gli elementi definiti in questa tabella. Nota: sono supportate solo chiavi di tipo String. |
URI | Stringa descritta (vedere la tabella seguente) | Valore AMQP |
DateTimeOffset | Elemento Long descritto (vedere la tabella seguente) | Valore AMQP |
TimeSpan | Elemento Long descritto (vedere la tabella seguente) | Valore AMQP |
Stream | binary | Dati AMQP (possono essere multipli). Le sezioni Data contengono i byte non elaborati dall'oggetto Stream. |
Altro oggetto | binary | Dati AMQP (possono essere multipli). Contiene i dati binari serializzati dell'oggetto che usa DataContractSerializer o un serializzatore fornito dall'applicazione. |
Tipo di .NET | Tipo descritto AMQP mappato | Note |
---|---|---|
URI | <type name=”uri” class=restricted source=”string”> <descriptor name=”com.microsoft:uri” /></type> |
Uri.AbsoluteUri |
DateTimeOffset | <type name=”datetime-offset” class=restricted source=”long”> <descriptor name=”com.microsoft:datetime-offset” /></type> |
DateTimeOffset.UtcTicks |
TimeSpan | <type name=”timespan” class=restricted source=”long”> <descriptor name=”com.microsoft:timespan” /></type> |
TimeSpan.Ticks |
Differenze di comportamento
Esistono alcune piccole differenze nel comportamento dell'API WindowsAzure.ServiceBus quando si usa AMQP rispetto al protocollo predefinito:
- La proprietà OperationTimeout viene ignorata.
MessageReceiver.Receive(TimeSpan.Zero)
viene implementato comeMessageReceiver.Receive(TimeSpan.FromSeconds(10))
.- Il completamento di messaggi tramite token di blocco può essere eseguito solo dai destinatari che hanno ricevuto i messaggi all'inizio.
Controllare le impostazioni del protocollo AMQP
Le API .NET espongono diverse impostazioni per controllare il comportamento del protocollo AMQP:
- MessageReceiver.PrefetchCount: controlla il credito iniziale applicato a un collegamento. Il valore predefinito è 0.
- MessagingFactorySettings.AmqpTransportSettings.MaxFrameSize: controlla la dimensione massima del frame AMQP offerta durante la negoziazione in fase di apertura della connessione. Il valore predefinito è 65.536 byte.
- MessagingFactorySettings.AmqpTransportSettings.BatchFlushInterval: se i trasferimenti possono essere eseguiti in batch, questo valore determina il ritardo massimo per l'invio di disposizioni. Per impostazione predefinita, il valore viene ereditato dai mittenti/destinatari. Un singolo mittente/destinatario può sostituire il valore predefinito di 20 millisecondi.
- MessagingFactory Impostazioni. AmqpTransport Impostazioni. UseSslStreamSecurity: controlla se vengono stabilite connessioni AMQP tramite una connessione TLS. Il valore predefinito è true.
Passaggi successivi
Di seguito sono disponibili altre informazioni. vedere i collegamenti seguenti: