Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa guida contiene informazioni dettagliate che consentono di comunicare con il bus di servizio di Azure usando l'API Java Message Service (JMS) 2.0.
In qualità di sviluppatore Java, se sei nuovo al bus di servizio di Azure, considera la lettura degli articoli seguenti.
Come iniziare | Concetti |
---|---|
Modello di programmazione JMS (Java Message Service)
Il modello di programmazione api Java Message Service è come illustrato nelle sezioni seguenti:
Annotazioni
Il livello Premium del bus di servizio di Azure supporta JMS 1.1 e JMS 2.0.
Bus di servizio di Azure: il livello Standard supporta funzionalità JMS 1.1 limitate. Per altri dettagli, vedere questa documentazione.
JMS - Blocchi predefiniti
I blocchi predefiniti seguenti sono disponibili per comunicare con l'applicazione JMS.
Annotazioni
La guida seguente è stata adattata dall'Esercitazione di Oracle Java EE 6 per Java Message Service (JMS)
Per una migliore comprensione del servizio messaggi Java (JMS) è consigliabile fare riferimento a questa esercitazione.
Factory di connessione
L'oggetto factory di connessione viene usato dal client per connettersi al provider JMS. La fabbrica di connessioni incapsula un set di parametri di configurazione della connessione definiti dall'amministratore.
Ogni factory di connessione è un'istanza delle interfacce ConnectionFactory
, QueueConnectionFactory
o TopicConnectionFactory
.
Per semplificare la connessione con il bus di servizio di Azure, queste interfacce vengono implementate rispettivamente tramite ServiceBusJmsConnectionFactory
, ServiceBusJmsQueueConnectionFactory
o ServiceBusJmsTopicConnectionFactory
.
Importante
Le applicazioni Java che usano l'API JMS 2.0 possono connettersi al bus di servizio di Azure usando la stringa di connessione o usando un TokenCredential
per sfruttare l'autenticazione supportata da Microsoft Entra. Quando si usa l'autenticazione supportata da Microsoft Entra, assicurarsi di assegnare ruoli e autorizzazioni all'identità in base alle esigenze.
- Identità gestita assegnata dal sistema
- Identità gestita assegnata dall'utente
- Entità servizio
- Autenticazione della stringa di connessione
Creare un'identità gestita assegnata dal sistema in Azure e usare questa identità per creare un oggetto TokenCredential
.
TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
È quindi possibile creare un'istanza della factory di connessione con i parametri seguenti.
- Credenziale token: rappresenta una credenziale in grado di fornire un token OAuth.
- Host: nome host dello spazio dei nomi del livello Premium del bus di servizio di Azure.
- Contenitore delle proprietà ServiceBusJmsConnectionFactorySettings, che contiene
- connectionIdleTimeoutMS: timeout di connessione inattiva in millisecondi.
- traceFrames: flag booleano per raccogliere frame di traccia AMQP per il debug.
- altri parametri di configurazione
La factory può essere creata come illustrato di seguito. Le credenziali del token e l'host sono parametri obbligatori, ma le altre proprietà sono facoltative.
String host = "<YourNamespaceName>.servicebus.windows.net";
ConnectionFactory factory = new ServiceBusJmsConnectionFactory(tokenCredential, host, null);
Destinazione JMS
Una destinazione è l'oggetto utilizzato da un client per specificare la destinazione dei messaggi prodotti e l'origine dei messaggi utilizzati.
Le destinazioni eseguono il mapping alle entità nel bus di servizio di Azure: code (in scenari da punto a punto) e argomenti (in scenari pub-sub).
Connessioni
Una connessione incapsula una connessione virtuale con un provider JMS. Utilizzando Azure Service Bus, rappresenta una connessione di stato tra l'applicazione e Azure Service Bus tramite AMQP.
Una connessione viene creata dalla fabbrica di connessioni, come illustrato nell'esempio seguente:
Connection connection = factory.createConnection();
Sessioni
Una sessione è un contesto a thread singolo per la produzione e l'utilizzo di messaggi. Può essere usato per creare messaggi, produttori di messaggi e consumatori, ma fornisce anche un contesto transazionale per consentire il raggruppamento di invii e ricezioni in un'unità atomica di lavoro.
È possibile creare una sessione dall'oggetto connessione, come illustrato nell'esempio seguente:
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
Annotazioni
L'API JMS non supporta la ricezione di messaggi da code o argomenti del bus di servizio con sessioni di messaggistica abilitate.
Modalità di sessione
È possibile creare una sessione con una delle modalità seguenti.
Modalità di sessione | Comportamento |
---|---|
Session.AUTO_ACKNOWLEDGE | La sessione riconosce automaticamente la ricezione di un messaggio da parte di un client quando la sessione è stata restituita correttamente da una chiamata a ricevere o quando il listener del messaggio ha chiamato la sessione per elaborare correttamente il messaggio. |
Session.CLIENT_ACKNOWLEDGE | Il client riconosce un messaggio utilizzato chiamando il metodo di conferma del messaggio. |
Session.DUPS_OK_ACKNOWLEDGE | Questa modalità di riconoscimento indica alla sessione di riconoscere pigramente la consegna dei messaggi. |
Session.SESSION_TRANSACTED | Questo valore può essere passato come argomento al metodo createSession(int sessionMode) nell'oggetto Connection per specificare che la sessione deve utilizzare una transazione locale. |
Quando la modalità sessione non è specificata, per impostazione predefinita viene selezionata la Session.AUTO_ACKNOWLEDGE .
JMSContext
Annotazioni
JMSContext viene definito come parte della specifica JMS 2.0.
JMSContext combina le funzionalità fornite dagli oggetti di connessione e di sessione. Può essere creato dall'oggetto factory di connessione.
JMSContext context = connectionFactory.createContext();
Modalità JMSContext
Proprio come l'oggetto Session , JMSContext può essere creato con le stesse modalità di riconoscimento indicate nelle modalità sessione.
JMSContext context = connectionFactory.createContext(JMSContext.AUTO_ACKNOWLEDGE);
Quando la modalità non viene specificata, il JMSContext.AUTO_ACKNOWLEDGE viene selezionato per impostazione predefinita.
Produttori di messaggi JMS
Un producer di messaggi è un oggetto creato usando JMSContext o una sessione e usato per l'invio di messaggi a una destinazione.
Può essere creato come oggetto autonomo, come illustrato nell'esempio seguente:
JMSProducer producer = context.createProducer();
Oppure creato in fase di esecuzione quando è necessario inviare un messaggio.
context.createProducer().send(destination, message);
Consumer di messaggi JMS
Un consumer di messaggi è un oggetto creato da un JMSContext o da una sessione e utilizzato per la ricezione di messaggi inviati a una destinazione. Può essere creato come illustrato in questo esempio:
JMSConsumer consumer = context.createConsumer(dest);
Ricezione sincrona tramite metodo receive()
Il consumer di messaggi fornisce un modo sincrono per ricevere messaggi dalla destinazione tramite il metodo receive()
.
Se non viene specificato alcun argomento/timeout o viene specificato un timeout di '0', il consumer si blocca a tempo indefinito a meno che il messaggio non arrivi o la connessione venga interrotta (a prescindere da quale sia precedente).
Message m = consumer.receive();
Message m = consumer.receive(0);
Quando viene specificato un argomento positivo diverso da zero, il consumer si blocca fino alla scadenza del timer.
Message m = consumer.receive(1000); // time out after one second.
Ricezione asincrona con listener di messaggi JMS
Un listener di messaggi è un oggetto utilizzato per la gestione asincrona dei messaggi in una destinazione. Implementa l'interfaccia MessageListener
, che contiene il metodo onMessage
in cui deve risiedere la logica di business specifica.
È necessario creare un'istanza di un oggetto listener di messaggi e registrarlo in un consumer di messaggi specifico usando il metodo setMessageListener
.
Listener myListener = new Listener();
consumer.setMessageListener(myListener);
Utilizzo da argomenti
I consumer di messaggi JMS vengono creati in base a una destinazione, che può essere una coda o un argomento.
I consumer nelle code sono semplicemente oggetti lato client che risiedono nel contesto della sessione (e connessione) tra l'applicazione client e il bus di servizio di Azure.
I consumatori su argomenti, tuttavia, hanno 2 parti -
- Un oggetto lato client che risiede nel contesto della sessione(oppure JMSContext) e,
- Una sottoscrizione che è un'entità nell'Azure Service Bus.
Le sottoscrizioni sono documentate qui e possono essere una delle seguenti:
- Sottoscrizioni durevoli condivise
- Sottoscrizioni non durevoli condivise
- Sottoscrizioni durevoli non condivise
- Sottoscrizioni non durevoli non condivise
Browser di accodamento JMS
L'API JMS fornisce un QueueBrowser
oggetto che consente all'applicazione di esplorare i messaggi nella coda e visualizzare i valori di intestazione per ogni messaggio.
È possibile creare un Browser di coda usando JMSContext come nell'esempio seguente:
QueueBrowser browser = context.createBrowser(queue);
Annotazioni
L'API JMS non fornisce un'API per esplorare un argomento.
Questo perché l'argomento stesso non archivia i messaggi. Non appena il messaggio viene inviato al topic, viene inoltrato alle sottoscrizioni appropriate.
Selettori di messaggi JMS
I selettori di messaggi possono essere usati dalle applicazioni riceventi per filtrare i messaggi ricevuti. Con i selettori di messaggio, l'applicazione ricevente scarica il lavoro di filtro dei messaggi al provider JMS (in questo caso, il bus di servizio di Azure) anziché assumerne la responsabilità.
I selettori possono essere utilizzati durante la creazione di uno dei consumer seguenti:
- Sottoscrizione durevole condivisa
- Sottoscrizione durevole non condivisa
- Sottoscrizione non durevole condivisa
- Sottoscrizione non condivisa non durevole
- Consumer della coda
- Browser di accodamento
Annotazioni
I selettori di Service Bus non supportano le parole chiave SQL "LIKE" e "BETWEEN".
Disposizione AMQP e mappatura delle operazioni del Service Bus
Ecco come si traduce una disposizione AMQP in un'operazione del Service Bus:
ACCEPTED = 1; -> Complete()
REJECTED = 2; -> DeadLetter()
RELEASED = 3; (just unlock the message in service bus, will then get redelivered)
MODIFIED_FAILED = 4; -> Abandon() which increases delivery count
MODIFIED_FAILED_UNDELIVERABLE = 5; -> Defer()
Riassunto
Questa guida per sviluppatori ha illustrato in che modo le applicazioni client Java che usano Java Message Service (JMS) possono connettersi con il bus di servizio di Azure.
Passaggi successivi
Per altre informazioni sul bus di servizio di Azure e sui dettagli sulle entità JMS (Java Message Service), vedere gli articoli seguenti:
- Bus di servizio - Code, argomenti e sottoscrizioni
- Bus di servizio - Entità del servizio messaggi Java
- Supporto di AMQP 1.0 nel bus di servizio di Azure
- Guida per gli sviluppatori di AMQP 1.0 del bus di servizio
- Introduzione alle code del bus di servizio
- API Servizio messaggi Java (documentazione Oracle esterna)
- Informazioni su come eseguire la migrazione da ActiveMQ al bus di servizio