Supporto avanzato del protocollo AMQP (Message Queueing Protocol) 1.0 in bus di servizio

Il servizio cloud bus di servizio di Azure usa AMQP 1.0 come mezzo principale di comunicazione. Microsoft è stata impegnata con partner di tutto il settore, sia clienti che fornitori di broker di messaggistica concorrenti, per sviluppare ed evolvere AMQP nell'ultimo decennio, con nuove estensioni sviluppate nel comitato tecnico OASIS AMQP. AMQP 1.0 è uno standard ISO e IEC (ISO 19464:20149).

AMQP consente di creare applicazioni ibride multipiattaforma usando un protocollo standard aperto indipendente dal fornitore e indipendente dall'implementazione. È possibile creare applicazioni usando componenti creati in linguaggi e framework diversi e in esecuzione su sistemi operativi diversi. Tutti questi componenti possono connettersi al bus di servizio e scambiare in modo lineare ed efficiente messaggi di business strutturati con assoluta fedeltà.

Introduzione: informazioni sul protocollo AMQP 1.0 e sulla sua rilevanza

I prodotti middleware orientati ai messaggi hanno tradizionalmente usato protocolli proprietari per le comunicazioni tra applicazioni client e broker. Ciò significa che dopo aver selezionato un broker di messaggistica di un determinato fornitore, è necessario usare le librerie del fornitore per connettere le applicazioni client a tale broker. Ciò comporta un grado di dipendenza da tale fornitore, poiché la conversione di un'applicazione in un prodotto diverso richiede modifiche al codice in tutte le applicazioni connesse. Nella community Java, gli standard API specifici del linguaggio come Java Message Service (JMS) e le astrazioni di Spring Framework hanno risolto questo problema, ma hanno un ambito di funzionalità ristretto ed escludono gli sviluppatori che usano altri linguaggi.

La connessione di broker di messaggistica da fornitori diversi è inoltre complicata In genere richiede il bridging a livello di applicazione per spostare i messaggi da un sistema a un altro e per traslare tra i formati di messaggio proprietari. È un requisito comune; ad esempio, quando è necessario fornire una nuova interfaccia unificata a sistemi diversi meno recenti o integrare i sistemi IT in seguito a una fusione. AMQP consente di interconnettere direttamente i broker, ad esempio usando router come Apache Qpid Dispatch Router o "shovel" native del broker come quello di RabbitMQ.

Il settore software è caratterizzato da rapido sviluppo. Nuovi linguaggi di programmazione e framework applicazione vengono introdotti a ritmo sorprendente. Analogamente, i requisiti dei sistemi IT si evolvono nel tempo e gli sviluppatori desiderano avvalersi delle possibilità offerte dai linguaggi e dalle funzionalità più recenti della piattaforma. Tuttavia, a volte il fornitore di messaggistica selezionato non supporta queste piattaforme. Se i protocolli di messaggistica sono proprietari, non è possibile che altri utenti forniscano librerie per queste nuove piattaforme. Pertanto, è necessario usare approcci come la creazione di gateway o bridge che consentano di continuare a usare il prodotto di messaggistica.

Il protocollo AMQP (Advanced Message Queuing Protocol) 1.0 è stato sviluppato per risolvere questi problemi presso JP Morgan Chase, che, come la maggior parte delle aziende del settore dei servizi finanziari, fa ampio uso di prodotti middleware orientati alla messaggistica. L'obiettivo da raggiungere era semplice: creare un protocollo di messaggistica a standard aperto che consentisse di creare applicazioni basate sui messaggi usando componenti creati in linguaggi, framework e sistemi operativi diversi, avvalendosi dei migliori prodotti offerti da diversi fornitori.

Caratteristiche tecniche del protocollo AMQP 1.0

AMQP 1.0 è un protocollo di messaggistica wire-level efficiente e affidabile che può essere utilizzato per creare applicazioni di messaggistica multipiattaforma e affidabili. Questo protocollo assolve a uno scopo semplice, ovvero definire i meccanismi per la trasmissione sicura, affidabile ed efficiente dei messaggi tra due parti. I messaggi stessi vengono codificati usando una rappresentazione dati portatile che consente a mittenti e destinatari eterogenei di scambiarsi messaggi di business strutturati con assoluta fedeltà. Ecco un riepilogo delle funzionalità più importanti:

  • Efficienza: AMQP 1.0 è un protocollo orientato alla connessione che usa una codifica binaria per le istruzioni del protocollo e per i messaggi aziendali trasmessi. Integra sofisticati schemi di controllo di flusso per massimizzare l'uso della rete e dei componenti connessi. Detto questo, il protocollo è stato progettato per raggiungere un equilibrio tra efficienza, flessibilità e interoperabilità.
  • Affidabile: il protocollo AMQP 1.0 consente lo scambio di messaggi con una gamma di garanzie di affidabilità, da fire-and-forget a reliable, esattamente una volta riconosciuto il recapito.
  • Flessibilità: AMQP 1.0 è un protocollo flessibile che consente di supportare diverse topologie. È possibile utilizzare lo stesso protocollo per le comunicazioni client-client, client-broker e broker-broker.
  • Indipendente dal modello broker: la specifica AMQP 1.0 non prevede requisiti per il modello di messaggistica usato da un broker. È pertanto possibile aggiungere con facilità il supporto per il protocollo AMQP 1.0 ai broker di messaggistica esistenti.

AMQP 1.0 è uno standard affermato

AMQP 1.0 è uno standard internazionale approvato da ISO e IEC come ISO/IEC 19464:2014.

Lo sviluppo di AMQP 1.0 procede dal 2008 a opera di un gruppo fondamentale di oltre 20 società, di cui fanno parte fornitori di tecnologie e aziende utenti finali. In questo lasso di tempo, le aziende utenti hanno comunicato i propri requisiti aziendali reali e i fornitori di tecnologie hanno proseguito lo sviluppo del protocollo con l'intento di soddisfarli. Nel corso del processo i fornitori hanno partecipato a workshop, che hanno permesso loro di collaborare per verificare l'interoperabilità tra le diverse implementazioni.

A ottobre 2011 il lavoro di sviluppo è passato a un comitato tecnico all'interno della Organization for the Advancement of Structured Information Standards (OASIS) e a ottobre 2012 è stato rilasciato lo standard OASIS AMQP 1.0. Del comitato tecnico hanno fatto parte le seguenti aziende durante lo sviluppo dello standard:

  • Fornitori di tecnologie: Axway Software, Huawei Technologies, IIT Software, INETCO Systems, Kaazing, Microsoft, Mitre Corporation, Primeton Technologies, Progress Software, Red Hat, SITA, Software AG, Solace Systems, VMware, WSO2, Zenika.
  • Aziende utenti: Bank of America, Credit Suisse, Deutsche Boerse, Goldman Sachs, JPMorgan Chase.

Le sedie attuali del comitato tecnico OASIS AMQP rappresentano Red Hat e Microsoft.

Di seguito sono indicati alcuni dei vantaggi più apprezzati degli standard aperti:

  • Minore possibilità di blocco da parte del fornitore
  • Interoperabilità
  • Ampia disponibilità di librerie e strumenti
  • Protezione dall'obsolescenza
  • Disponibilità di personale competente
  • Rischio ridotto e gestibile

AMQP 1.0 e bus di servizio

Il supporto di AMQP 1.0 in bus di servizio di Azure significa che è possibile usare le funzionalità di accodamento bus di servizio e pubblicazione/sottoscrizione della messaggistica negoziata da un'ampia gamma di piattaforme usando un protocollo binario efficiente. Inoltre, è possibile creare applicazioni costituite da componenti creati con un insieme di linguaggi, framework e sistemi operativi.

La figura riportata di seguito illustra una distribuzione di esempio, in cui i client Java in esecuzione su Linux, scritti usando l'API JMS (Java Message Service) standard, e i client .NET in esecuzione su Windows si scambiano messaggi tramite il bus di servizio usando il protocollo AMQP 1.0.

Diagramma che mostra un bus di servizio scambiare messaggi con due ambienti Linux e due ambienti Windows.

Figura 1: Scenario di distribuzione di esempio, in cui per la messaggistica tra diverse piattaforme usa il bus di servizio e il protocollo AMQP 1.0

Tutte le librerie client supportate bus di servizio disponibili tramite Azure SDK usano AMQP 1.0.

L'opzione di protocollo AMQP over-WebSockets viene eseguita sulla porta TCP 443 esattamente come l'API HTTP/REST, ma è diversamente identica a quella di AMQP normale. Questa opzione ha una latenza di connessione iniziale più elevata a causa di round trip aggiuntivi di handshake e un sovraccarico leggermente maggiore come compromesso per la condivisione della porta HTTPS. Se è selezionata questa modalità, la porta TCP 443 è sufficiente per la comunicazione. Le opzioni seguenti consentono di selezionare la modalità WebSocket AMQP.

Lingua Opzione
.NET (Azure.Messaging.ServiceBus) Creare ServiceBusClient usando un costruttore che accetta ServiceBusClientOptions come parametro. Impostare ServiceBusClientOptions.TransportType su ServiceBusTransportType.AmqpWebSockets
.NET (Microsoft.Azure.ServiceBus) Quando si creano oggetti client, usare costruttori che accettano TransportType, ServiceBusConnection o ServiceBusConnectionStringBuilder come parametri.

Per la costruzione che accetta transportType come parametro, impostare il parametro su TransportType.AmqpWebSockets.

Per il costruttore che accetta ServiceBusConnection come parametro, impostare ServiceBusConnection.TransportType su TransportType.AmqpWebSockets.

Se si usa ServiceBusConnectionStringBuilder, usare costruttori che offrono un'opzione per specificare .transportType

Java (com.azure.messaging.servicebus) Quando si creano client, impostare ServiceBusClientBuilder.transportType su AmqpTransportType.AMQP.AMQP_WEB_SOCKETS
Java (com.microsoft.azure.servicebus) Quando si creano client, impostare transportType in com.microsoft.azure.servicebus.ClientSettings su com.microsoft.azure.servicebus.primitives.TransportType.AMQP_WEB_SOCKETS
JavaScript Quando si creano bus di servizio oggetti client, usare la webSocketOptions proprietà in ServiceBusClientOptions.
Python Quando si creano client bus di servizio, impostare ServiceBusClient.transport_type su TransportType.AmqpOverWebSocket

Il 30 settembre 2026 verranno ritirate le librerie dell'SDK del bus di servizio di Azure WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus e com.microsoft.azure.servicebus, che non sono conformi alle linee guida di Azure SDK. Verrà terminato anche il supporto del protocollo SBMP, 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 del ritiro del supporto.

Inoltre, è possibile usare bus di servizio da qualsiasi stack di protocolli conforme a AMQP 1.0:

Lingua Libreria
Java Apache Qpid Proton-J
C/C++ Azure uAMQP C, Apache Qpid Proton-C
Python Azure uAMQP per Python, Apache Qpid Proton Python)
PHP Azure uAMQP per PHP
Ruby Apache Qpid Proton Ruby
Go Azure Go AMQP, Apache Qpid Proton Go
C#/F#/VB AMQP .NET Lite, Apache NMS AMQP
JavaScript/Node Nandù

Riepilogo

  • AMQP 1.0 è un protocollo di messaggistica aperto e affidabile, che può essere utilizzato per creare applicazioni ibride multipiattaforma. AMQP 1.0 è uno standard OASIS.

Passaggi successivi

Di seguito sono disponibili altre informazioni. vedere i collegamenti seguenti: