Usare JMS in Spring per accedere al bus di servizio di Azure
Questa esercitazione illustra come usare Spring Boot Starter per bus di servizio di Azure JMS per inviare e ricevere messaggi da bus di servizio queues
e topics
.
Azure fornisce una piattaforma di messaggistica asincrona denominata bus di servizio di Azure ("bus di servizio") basata sullo standard Advanced Message Queueing Protocol 1.0 ("AMQP 1.0"). È possibile usare bus di servizio nell'intera gamma di piattaforme di Azure supportate.
Spring Boot Starter per bus di servizio di Azure JMS offre l'integrazione spring JMS con bus di servizio.
Il video seguente descrive come integrare le applicazioni Spring JMS con bus di servizio di Azure usando JMS 2.0.
In questa esercitazione sono inclusi due metodi di autenticazione: autenticazione di Microsoft Entra e autenticazione di firme di accesso condiviso (SAS). La scheda Senza password mostra l'autenticazione di Microsoft Entra e la scheda Stringa di connessione mostra l'autenticazione sas.
L'autenticazione di Microsoft Entra è un meccanismo per la connessione a bus di servizio di Azure JMS usando le identità definite in Microsoft Entra ID. Con l'autenticazione Microsoft Entra è possibile gestire centralmente le identità degli utenti del database e di altri servizi Microsoft semplificando la gestione delle autorizzazioni.
L'autenticazione sas usa il stringa di connessione dello spazio dei nomi bus di servizio di Azure per l'accesso delegato a bus di servizio JMS. Se si sceglie di usare le firme di accesso condiviso come credenziali, è necessario gestire manualmente il stringa di connessione.
Prerequisiti
Una sottoscrizione di Azure: creare un account gratuitamente.
Java Development Kit (JDK) versione 8 o successiva.
Apache Maven versione 3.2 o successiva.
Coda o argomento per bus di servizio di Azure. Se non è disponibile, vedere Usare portale di Azure per creare uno spazio dei nomi bus di servizio e una coda o Usare il portale di Azure per creare un argomento e sottoscrizioni bus di servizio all'argomento.
Applicazione Spring Boot. Se non è disponibile, creare un progetto Maven con Spring Initializr. Assicurarsi di selezionare Progetto Maven e, in Dipendenze, aggiungere la dipendenza Spring Web , quindi selezionare Java versione 8 o successiva.
Importante
Spring Boot versione 2.5 o successiva è necessario per completare i passaggi di questa esercitazione.
Inviare e ricevere messaggi da bus di servizio di Azure
Con una coda o un argomento per bus di servizio di Azure, è possibile inviare e ricevere messaggi usando Spring Cloud bus di servizio di Azure JMS.
Per installare il modulo Spring Cloud bus di servizio di Azure JMS Starter, aggiungere le dipendenze seguenti al file pom.xml:
Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.18.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Nota
Se si usa Spring Boot 2.x, assicurarsi di impostare la
spring-cloud-azure-dependencies
versione su4.19.0
. Questa distinta base deve essere configurata nella<dependencyManagement>
sezione del file di pom.xml . In questo modo tutte le dipendenze di Spring Cloud Azure usano la stessa versione. Per altre informazioni sulla versione usata per questa distinta base, vedere La versione di Spring Cloud azure da usare.L'artefatto Spring Cloud bus di servizio di Azure JMS Starter:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId> </dependency>
Codice dell'applicazione
Usare la procedura seguente per configurare l'applicazione in modo da usare una coda o un argomento bus di servizio per inviare e ricevere messaggi.
Configurare le credenziali bus di servizio aggiungendo le proprietà seguenti al file application.properties.
Nota
bus di servizio di Azure JMS supporta l'uso di Microsoft Entra ID per autorizzare le richieste alle risorse di bus di servizio. Con Microsoft Entra ID è possibile usare il controllo degli accessi in base al ruolo di Azure per concedere le autorizzazioni a un'entità di sicurezza, che può essere un utente o un'entità servizio dell'applicazione.
Importante
Prima di iniziare, assicurarsi di aver assegnato il ruolo di proprietario dei dati bus di servizio di Azure all'account Microsoft Entra attualmente in uso. Per ulteriori informazioni, vedi Assegnare ruoli di Azure usando il portale di Azure.
spring.jms.servicebus.namespace=<ServiceBusNamespace> spring.jms.servicebus.pricing-tier=<ServiceBusPricingTier> spring.jms.servicebus.passwordless-enabled=true spring.jms.listener.receive-timeout=60000
La tabella seguente descrive i campi nella configurazione:
Campo Descrizione spring.jms.servicebus.namespace
Specificare lo spazio dei nomi ottenuto nell'istanza del servizio bus di servizio dal portale di Azure. spring.jms.servicebus.pricing-tier
Specificare il piano tariffario del bus di servizio. I valori supportati sono Premium e Standard. Il livello Premium usa Java Message Service (JMS) 2.0, mentre il livello standard usa JMS 1.1 per interagire con bus di servizio di Azure. spring.jms.servicebus.passwordless-enabled
Specificare se usare senza password. spring.jms.listener.receive-timeout
Per impostazione predefinita, il valore di timeout di ricezione è 1000. È consigliabile impostarla su 60000 Aggiungere
@EnableJms
per abilitare il supporto per gli endpoint con annotazioni del listener JMS. UsareJmsTemplate
per inviare messaggi e@JmsListener
per ricevere messaggi, come illustrato nell'esempio seguente:import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.jms.annotation.EnableJms; import org.springframework.boot.CommandLineRunner; import org.springframework.jms.annotation.JmsListener; import org.springframework.jms.core.JmsTemplate; @SpringBootApplication @EnableJms public class ServiceBusJMSQueueApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(ServiceBusJMSQueueApplication.class); private static final String QUEUE_NAME = "<QueueName>"; @Autowired private JmsTemplate jmsTemplate; public static void main(String[] args) { SpringApplication.run(ServiceBusJMSQueueApplication.class, args); } @Override public void run(String... args) { LOGGER.info("Sending message"); jmsTemplate.convertAndSend(QUEUE_NAME, "Hello World"); } @JmsListener(destination = QUEUE_NAME, containerFactory = "jmsListenerContainerFactory") public void receiveMessage(String message) { LOGGER.info("Message received: {}", message); } }
Sostituire
<QueueName>
con il nome della coda configurato nello spazio dei nomi del bus di servizio.Suggerimento
In questa esercitazione non sono presenti operazioni di autenticazione nelle configurazioni o nel codice. Tuttavia, la connessione ai servizi di Azure richiede l'autenticazione. Per completare l'autenticazione, è necessario usare Identità di Azure. Spring Cloud Azure usa
DefaultAzureCredential
, che la libreria di identità di Azure fornisce per ottenere le credenziali senza modifiche al codice.DefaultAzureCredential
supporta più metodi di autenticazione e determina il metodo da usare in fase di esecuzione. Questo approccio consente all'app di usare metodi di autenticazione diversi in ambienti diversi (ad esempio ambienti locali e di produzione) senza implementare codice specifico dell'ambiente. Per altre informazioni, vedere DefaultAzureCredential.Per completare l'autenticazione negli ambienti di sviluppo locali, è possibile usare l'interfaccia della riga di comando di Azure, Visual Studio Code, PowerShell o altri metodi. Per altre informazioni, vedere Autenticazione di Azure in ambienti di sviluppo Java. Per completare l'autenticazione negli ambienti di hosting di Azure, è consigliabile usare l'identità gestita assegnata dall'utente. Per altre informazioni, vedere Informazioni sulle identità gestite per le risorse di Azure
Avviare l’applicazione. Verrà visualizzato
Sending message
eHello World
pubblicato nel log applicazioni, come illustrato nell'output di esempio seguente:Sending message Message received: Hello World
Distribuire in Azure Spring Apps
Ora che l'applicazione Spring Boot è in esecuzione in locale, è possibile spostarla nell'ambiente di produzione. Azure Spring Apps semplifica la distribuzione di applicazioni Spring Boot in Azure senza modifiche al codice. Il servizio gestisce l'infrastruttura delle applicazioni Spring per consentire agli sviluppatori di concentrarsi sul codice. Azure Spring Apps fornisce la gestione del ciclo di vita tramite funzionalità complete di monitoraggio e diagnostica, gestione della configurazione, individuazione dei servizi, integrazione di CI/CD, distribuzioni blu/verde e altro ancora. Per distribuire l'applicazione in Azure Spring Apps, vedere Distribuire la prima applicazione in Azure Spring Apps.