Použití JMS v Springu pro přístup k Azure Service Bus

Tento kurz ukazuje, jak pomocí úvodní sady Spring Boot pro Azure Service Bus JMS odesílat zprávy a přijímat zprávy z Service Bus queues a topics.

Azure poskytuje asynchronní platformu zasílání zpráv s názvem Azure Service Bus ("Service Bus") založenou na standardu Advanced Message Queueing Protocol 1.0 ("AMQP 1.0"). Můžete použít Service Bus v celé řadě podporovaných platforem Azure.

Úvodní sada Spring Boot pro Azure Service Bus JMS poskytuje integraci Spring JMS s Service Bus.

Následující video popisuje, jak integrovat aplikace Spring JMS s Azure Service Bus pomocí JMS 2.0.


V tomto kurzu zahrneme dvě metody ověřování: Microsoft Entra ověřování a ověřování pomocí Sdílených přístupových podpisů (SAS). Na kartě Passwordless se zobrazuje ověřování Microsoft Entra a na kartě Řetězec připojení se zobrazuje ověřování SAS.

Microsoft Entra ověřování je mechanismus, který umožňuje připojení k Azure Service Bus JMS s použitím identit definovaných v Microsoft Entra ID. S ověřováním Microsoft Entra můžete spravovat identity uživatelů databáze a další služby Microsoft v centrálním umístění, což zjednodušuje správu oprávnění.

Ověřování SAS používá připojovací řetězec vašeho oboru názvů Azure Service Bus pro delegovaný přístup k Service Bus JMS. Pokud se rozhodnete používat sdílené přístupové podpisy jako přihlašovací údaje, musíte spravovat připojovací řetězec sami.

Požadavky

Důležité

K dokončení kroků v tomto kurzu se vyžaduje Spring Boot verze 2.5 nebo vyšší.

Odesílání a příjem zpráv z Azure Service Bus

Pomocí fronty nebo tématu pro Azure Service Bus můžete odesílat a přijímat zprávy pomocí Spring Cloudu Azure Service Bus JMS.

Pokud chcete nainstalovat modul Spring Cloud Azure Service Bus JMS Starter, přidejte do souboru pom.xml0 následující závislosti:

  • Spring Cloud Azure BOM:

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

    Poznámka:

    Pokud používáte Spring Boot 4.0.x, nezapomeňte nastavit spring-cloud-azure-dependencies verzi na 7.3.0.

    Pokud používáte Spring Boot 3.5.x, nezapomeňte nastavit spring-cloud-azure-dependencies verzi na 6.4.0hodnotu.

    Pokud používáte Spring Boot 3.1.x-3.5.x, nezapomeňte nastavit verzi na spring-cloud-azure-dependencies.

    Pokud používáte Spring Boot 2.x, nezapomeňte nastavit spring-cloud-azure-dependencies verzi na 4.20.0.

    Tato faktura materiálu (BOM) by měla být nakonfigurována v <dependencyManagement> části vašeho pom.xml souboru. Tím zajistíte, že všechny závislosti Spring Cloud Azure budou používat stejnou verzi.

    Další informace o verzi použité pro tento kusovník najdete v tématu Kterou verzi Spring Cloud Azure bych měl použít.

  • Úvodní artefakt Spring Cloudu Azure Service Bus JMS:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
    </dependency>
    

Vytvoření kódu aplikace

Pomocí následujícího postupu nakonfigurujte aplikaci tak, aby k odesílání a příjmu zpráv používala Service Bus frontu nebo téma.

  1. Nakonfigurujte přihlašovací údaje Service Bus přidáním následujících vlastností do souboru application.properties.

    Poznámka:

    Azure Service Bus JMS podporuje použití Microsoft Entra ID pro autorizaci žádostí o Service Bus prostředky. S Microsoft Entra ID můžete pomocí řízení přístupu na základě rolí (Azure RBAC) udělit oprávnění k objektu zabezpečení, což může být uživatel nebo služební účet aplikace.

    Důležité

    Než začnete, ujistěte se, že jste přiřadili roli vlastníka dat Azure Service Bus k účtu Microsoft Entra, který právě používáte. Další informace najdete v tématu Assignování rolí Azure pomocí portálu Azure.

    spring.jms.servicebus.namespace=<ServiceBusNamespace>
    spring.jms.servicebus.pricing-tier=<ServiceBusPricingTier>
    spring.jms.servicebus.passwordless-enabled=true
    spring.jms.listener.receive-timeout=60000
    

    Následující tabulka popisuje pole v konfiguraci:

    Pole Popis
    spring.jms.servicebus.namespace Zadejte obor názvů, který jste získali v instanci služby Service Bus z portálu Azure.
    spring.jms.servicebus.pricing-tier Zadejte cenovou úroveň služby Service Bus. Podporované hodnoty jsou premium a standard. Úroveň Premium používá službu Java Message Service (JMS) 2.0, zatímco úroveň Standard používá JMS 1.1 k interakci s Azure Service Bus.
    spring.jms.servicebus.passwordless-enabled Určete, jestli se má používat bez hesla.
    spring.jms.listener.receive-timeout Ve výchozím nastavení je hodnota časového limitu příjmu 1000. Doporučujeme, abyste ho nastavili na 6 0000.
  2. Přidat @EnableJms pro povolení podpory pro koncové body označené anotacemi naslouchače JMS. Slouží JmsTemplate k odesílání zpráv a @JmsListener přijímání zpráv, jak je znázorněno v následujícím příkladu:

    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);
        }
    
    }
    

    Nahraďte <QueueName> vlastním názvem fronty nakonfigurovaným v oboru názvů Service Bus.

    Návod

    V tomto kurzu nejsou v konfiguracích ani kódu žádné ověřovací operace. Připojení ke službám Azure ale vyžaduje ověření. K dokončení ověřování je potřeba použít Azure Identity. Spring Cloud Azure používá DefaultAzureCredential, které knihovna identit Azure poskytuje, aby vám pomohla získat přihlašovací údaje bez jakýchkoli změn kódu.

    DefaultAzureCredential podporuje více metod ověřování a určuje, kterou metodu použít za běhu. Tento přístup umožňuje vaší aplikaci používat různé metody ověřování v různých prostředích (například v místních a produkčních prostředích) bez implementace kódu specifického pro prostředí. Další informace naleznete v tématu DefaultAzureCredential.

    K dokončení ověřování v místních vývojových prostředích můžete použít Azure CLI, Visual Studio Code, PowerShell nebo jiné metody. Další informace najdete v tématu ověřování Azure pro vývojová prostředí Java. K dokončení ověřování v Azure hostitelských prostředích doporučujeme použít spravovanou identitu přiřazenou uživatelem. Další informace najdete v tématu Co jsou spravované identity pro prostředky Azure?

  3. Spusťte aplikaci. Měli byste vidět Sending message a Hello World publikované do protokolu aplikace, jak je znázorněno v následujícím příkladu výstupu:

    Sending message
    Message received: Hello World
    

Nasazení do Azure Spring Apps

Teď, když máte aplikaci Spring Boot spuštěnou místně, je čas ji přesunout do produkčního prostředí. Azure Spring Apps usnadňuje nasazování aplikací Spring Boot do Azure bez jakýchkoli změn kódu. Služba spravuje infrastrukturu aplikací Spring, aby se vývojáři mohli soustředit na svůj kód. Azure Spring Apps poskytuje správu životního cyklu pomocí komplexního monitorování a diagnostiky, správy konfigurace, zjišťování služeb, integrace CI/CD, modrých zelených nasazení a dalších. Pokud chcete aplikaci nasadit do Azure Spring Apps, viz Nasazení první aplikace na Azure Spring Apps.

Další kroky