Condividi tramite


Usare JMS in Spring per accedere alle Azure Service Bus

Questa esercitazione illustra come usare Spring Boot Starter per Azure Service Bus JMS per inviare e ricevere messaggi da Service Bus queues e topics.

Azure fornisce una piattaforma di messaggistica asincrona denominata Azure Service Bus ("Service Bus") basata sullo standard Advanced Message Queueing Protocol 1.0 ("AMQP 1.0"). È possibile usare Service Bus nell'intera gamma di piattaforme di Azure supportate.

Spring Boot Starter per Azure Service Bus JMS fornisce l'integrazione di Spring JMS con Service Bus.

Il video seguente descrive come integrare le applicazioni Spring JMS con Azure Service Bus usando JMS 2.0.


In questa esercitazione sono inclusi due metodi di autenticazione: autenticazione Microsoft Entra e Autenticazione delle firme di accesso condiviso. La scheda Passwordless mostra l'autenticazione Microsoft Entra e la stringa Connection mostra l'autenticazione sas.

L'autenticazione di Microsoft Entra è un meccanismo per connettersi ad Azure Service Bus JMS utilizzando le identità definite in Microsoft Entra ID. Con l'autenticazione Microsoft Entra, è possibile gestire le identità utente del database e altri servizi Microsoft in una posizione centrale, semplificando la gestione delle autorizzazioni.

L'autenticazione SAS utilizza la stringa di connessione del namespace di Azure Service Bus per consentire l'accesso delegato a Service Bus JMS. Se si sceglie di usare le firme di accesso condiviso come credenziali, è necessario gestire manualmente il connection string.

Prerequisiti

Importante

Spring Boot versione 2.5 o successiva è necessario per completare i passaggi di questa esercitazione.

Inviare e ricevere messaggi da Azure Service Bus

Con una coda o un argomento per Azure Service Bus, è possibile inviare e ricevere messaggi usando Spring Cloud Azure Service Bus JMS.

Per installare il modulo Spring Cloud Azure Service Bus JMS Starter, aggiungere le dipendenze seguenti al file pom.xml:

  • L'elenco dei materiali di Spring Cloud Azure (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>7.1.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Nota

    Se si usa Spring Boot 4.0.x, assicurarsi di impostare la spring-cloud-azure-dependencies versione su 7.1.0.

    Se si usa Spring Boot 3.5.x, assicurarsi di impostare la spring-cloud-azure-dependencies versione su 6.1.0.

    Se si usa Spring Boot 3.1.x-3.5.x, assicurarsi di impostare la spring-cloud-azure-dependencies versione su 5.25.0.

    Se si usa Spring Boot 2.x, assicurarsi di impostare la spring-cloud-azure-dependencies versione su 4.20.0.

    Questo Bill of Material (BOM) deve essere configurato nella sezione <dependencyManagement> del file pom.xml. In questo modo, tutte le dipendenze di Spring Cloud Azure usano la stessa versione.

    Per ulteriori informazioni sulla versione utilizzata per questo BOM, vedere Quale versione di Spring Cloud Azure dovrei usare.

  • L'artefatto "Spring Cloud Azure Service Bus 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 Service Bus per inviare e ricevere messaggi.

  1. Configurare le credenziali Service Bus aggiungendo le proprietà seguenti al file application.properties.

    Nota

    Azure Service Bus JMS supporta l'uso di Microsoft Entra ID per autorizzare le richieste alle risorse di Service Bus. Con Microsoft Entra ID è possibile usare Azure controllo degli accessi in base al ruolo (Azure RBAC) per concedere autorizzazioni a un'entità principale della sicurezza, che può essere un utente o un principale del servizio applicativo.

    Importante

    Prima di iniziare, assicurati di avere assegnato il ruolo Proprietario dei dati di Azure Service Bus all'account Microsoft Entra attualmente in uso. Per altre informazioni, vedere Assegnare i ruoli di Azure utilizzando 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 Service Bus 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 Azure Service Bus.
    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
  2. Aggiungere @EnableJms per abilitare il supporto per gli endpoint annotati del listener JMS. Usare JmsTemplate 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 proprio nome di coda configurato nel proprio spazio dei nomi Service Bus.

    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 Azure Identity. Spring Cloud Azure usa DefaultAzureCredential, che la libreria di identità 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 Azure CLI, Visual Studio Code, PowerShell o altri metodi. Per altre informazioni, vedere autenticazione Azure in ambienti di sviluppo Java. Per completare l'autenticazione negli ambienti di hosting Azure, è consigliabile usare l'identità gestita assegnata dall'utente. Per altre informazioni, vedere Che sono identità gestite per le risorse Azure?

  3. Avviare l’applicazione. Dovresti vedere Sending message e Hello World registrati nel log dell'applicazione, come illustrato nell'output di esempio seguente:

    Sending message
    Message received: Hello World
    

Distribuire su 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 offre la gestione del ciclo di vita usando monitoraggio e diagnostica completi, gestione della configurazione, individuazione dei servizi, integrazione 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.

Passaggi successivi