guida per sviluppatori di JMS 2.0 bus di servizio di Azure
Questa guida contiene informazioni dettagliate che consentono di comunicare con bus di servizio di Azure usando l'API Java Message Service (JMS) 2.0.
Gli sviluppatori Java, se non si ha familiarità con bus di servizio di Azure, è consigliabile leggere gli articoli seguenti.
Introduzione | Concetti |
---|---|
Modello di programmazione JMS (Java Message Service)
Il modello di programmazione dell'API Servizio messaggi Java è come illustrato di seguito:
Nota
bus di servizio di Azure livello Premium 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.
Nota
La guida seguente è stata adattata da Oracle Java edizione Enterprise 6 Tutorial for Java Message Service (JMS)
Per una migliore comprensione del servizio messaggi Java (JMS) è consigliabile fare riferimento a questa esercitazione.
Connessione factory
L'oggetto factory di connessione viene usato dal client per connettersi al provider JMS. La factory di connessione incapsula un set di parametri di configurazione della connessione definiti dall'amministratore.
Ogni factory di connessione è un'istanza di ConnectionFactory
o QueueConnectionFactory
TopicConnectionFactory
interfaccia .
Per semplificare la connessione con bus di servizio di Azure, queste interfacce vengono implementate rispettivamente tramite ServiceBusJmsConnectionFactory
ServiceBusJmsQueueConnectionFactory
e ServiceBusJmsTopicConnectionFactory
.
Importante
Le applicazioni Java che usano l'API JMS 2.0 possono connettersi a bus di servizio di Azure usando il stringa di connessione o usando per TokenCredential
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 ion
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 ion con i parametri seguenti.
- Credenziale token: rappresenta una credenziale in grado di fornire un token OAuth.
- Host: il nome host dello spazio dei nomi bus di servizio di Azure livello Premium.
- ServiceBusJms Connessione ionFactory Impostazioni contenitore delle proprietà, 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à in 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. Con bus di servizio di Azure, rappresenta una connessione con stato tra l'applicazione e bus di servizio di Azure tramite AMQP.
Viene creata una connessione dalla factory di connessione, come illustrato di seguito.
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, producer di messaggi e consumer, ma fornisce anche un contesto transazionale per consentire il raggruppamento di invii e ricezione in un'unità atomica di lavoro.
È possibile creare una sessione dall'oggetto connessione, come illustrato di seguito.
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
Nota
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 confermare in modo differire il recapito dei messaggi. |
Sessione. edizione StandardSSION_TRANSACTED | Questo valore può essere passato come argomento al metodo createSession(int sessionMode) nell'oggetto Connessione ion 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
Nota
JMSContext viene definito come parte della specifica JMS 2.0.
JMSContext combina le funzionalità fornite dall'oggetto connessione e 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 è specificata, il JMSContext.AUTO_ACKNOWLEDGE viene selezionato per impostazione predefinita.
Producer 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 di seguito:
JMSProducer producer = context.createProducer();
o 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 di seguito:
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 receive()
metodo .
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 onMessage
metodo in cui deve essere attiva 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 setMessageListener
metodo .
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 ion) tra l'applicazione client e bus di servizio di Azure.
I consumatori su argomenti, tuttavia, hanno 2 parti -
- Oggetto lato client che risiede nel contesto di Session(o JMSContext) e
- Una sottoscrizione che è un'entità in bus di servizio di Azure.
Le sottoscrizioni sono documentate qui e possono essere una delle seguenti:
- Sottoscrizioni durevoli condivise
- Sottoscrizioni non durevoli condivise
- Sottoscrizioni permanenti 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 Visualizzatore code usando JMSContext come indicato di seguito.
QueueBrowser browser = context.createBrowser(queue);
Nota
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 all'argomento, viene inoltrato alle sottoscrizioni appropriate.
Selettori di messaggi JMS
I selettori di messaggi possono essere usati ricevendo applicazioni 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, bus di servizio di Azure) anziché assumerne la responsabilità stessa.
I selettori possono essere utilizzati durante la creazione di uno dei consumer seguenti:
- Sottoscrizione durevole condivisa
- Sottoscrizione durevole non condivisa
- Sottoscrizione condivisa non durevole
- Sottoscrizione non condivisa non durevole
- Browser di accodamento
Mapping della disposizione AMQP e dell'operazione del bus di servizio
Ecco come si traduce un'eliminazione AMQP in un'operazione di bus di servizio:
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()
Riepilogo
Questa guida per sviluppatori ha illustrato come le applicazioni client Java che usano Java Message Service (JMS) possano connettersi con bus di servizio di Azure.
Passaggi successivi
Per altre informazioni su bus di servizio di Azure e dettagli sulle entità JMS (Java Message Service), vedere i collegamenti seguenti:
- bus di servizio : code, argomenti e sottoscrizioni
- bus di servizio - Entità del servizio messaggi Java
- Supporto per il protocollo AMQP 1.0 nel bus di servizio di Azure
- Guida per sviluppatori di AMQP 1.0 per il 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 a bus di servizio