Share via


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 ConnectionFactoryo QueueConnectionFactoryTopicConnectionFactory interfaccia .

Per semplificare la connessione con bus di servizio di Azure, queste interfacce vengono implementate rispettivamente tramite ServiceBusJmsConnectionFactoryServiceBusJmsQueueConnectionFactory 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.

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: