Dela via


Använda Azure Service Bus med JMS

Den här artikeln gäller för:✅ version 4.19.0 ✅ version 5.19.0

Den här artikeln beskriver hur du använder Azure Service Bus med JMS-API:et integrerat i Spring JMS-ramverket.

Kärnfunktioner

Lösenordslös anslutning

Lösenordsfri anslutning använder Microsoft Entra-autentisering för att ansluta till Azure-tjänster utan att lagra några autentiseringsuppgifter i programmet, dess konfigurationsfiler eller i miljövariabler. Microsoft Entra-autentisering är en mekanism för att ansluta till Azure Service Bus med hjälp av identiteter som definierats i Microsoft Entra-ID. Med Microsoft Entra-autentisering kan du hantera Service Bus och andra Microsoft-tjänster på en central plats, vilket förenklar behörighetshanteringen.

Så här fungerar det

Spring Cloud Azure skapar först en av följande typer av autentiseringsuppgifter beroende på konfigurationen för programautentisering:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

Om ingen av dessa typer av autentiseringsuppgifter hittas används autentiseringskedjan via DefaultTokenCredential för att hämta autentiseringsuppgifter från programegenskaper, miljövariabler, hanterad identitet eller IDE:er. Mer information finns i Spring Cloud Azure-autentisering.

Beroendekonfiguration

Lägg till följande beroenden om du vill migrera ditt Spring JMS-program för att använda Azure Service Bus.

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

Konfiguration

I följande tabell beskrivs de konfigurerbara egenskaperna när du använder Spring JMS-stödet:

Egenskap Beskrivning
spring.jms.servicebus.connection-string Anslutningssträngen för Azure Service Bus för när du vill ange anslutningssträngen direkt.
spring.jms.servicebus.topic-client-id JMS-klient-ID:t. Fungerar bara för topicJmsListenerContainerFactory böna.
spring.jms.servicebus.enabled Ett värde som anger om du vill aktivera automatisk konfiguration av Service Bus JMS. Standardvärdet är true.
spring.jms.servicebus.idle-timeout Tidsgränsen för inaktiv anslutning som anger hur länge klienten förväntar sig att Service Bus ska hålla en anslutning vid liv när inga meddelanden levereras. Standardvärdet är 2m.
spring.jms.servicebus.passwordless-enabled Om du vill aktivera lösenordslös för Azure Service Bus JMS. Standardvärdet är false.
spring.jms.servicebus.pricing-tier Prisnivån för Azure Service Bus. Värden som stöds är Premium och standard. Premium-nivån använder Java Message Service (JMS) 2.0, medan standardnivån använder JMS 1.1 för att interagera med Azure Service Bus.
spring.jms.servicebus.listener.reply-pub-sub-domain Ett värde som anger om svarsmålstypen är ett ämne. Fungerar bara för topicJmsListenerContainerFactory böna.
spring.jms.servicebus.listener.phase Fasen då containern ska startas och stoppas.
spring.jms.servicebus.listener.reply-qos-settings Konfigurerar QosSettings som ska användas när du skickar ett svar.
spring.jms.servicebus.listener.subscription-durable Ett värde som anger om prenumerationen ska vara beständig. Fungerar bara för topicJmsListenerContainerFactory böna. Standardvärdet är true.
spring.jms.servicebus.listener.subscription-shared Ett värde som anger om prenumerationen ska delas. Fungerar bara för topicJmsListenerContainerFactory böna.
spring.jms.servicebus.pool.block-if-full Ett värde som anger om du vill blockera när en anslutning begärs och poolen är full. Ställ in den på false för att kasta en JMSException i stället.
spring.jms.servicebus.pool.block-if-full-timeout Blockeringsperioden innan du utlöser ett undantag om poolen fortfarande är full.
spring.jms.servicebus.pool.enabled Ett värde som anger om en JmsPoolConnectionFactory ska skapas i stället för en vanlig ConnectionFactory.
spring.jms.servicebus.pool.idle-timeout Tidsgränsen för inaktivitet i anslutningspoolen.
spring.jms.servicebus.pool.max-anslutningar Det maximala antalet poolanslutningar.
spring.jms.servicebus.pool.max-sessions-per-connection Det maximala antalet poolsessioner per anslutning i poolen.
spring.jms.servicebus.pool.time-between-expiration-check Tiden att viloläge mellan körningar av den inaktiva anslutningsavlägsningstråden. När det är negativt körs ingen inaktiv anslutningsavlägsningstråd.
spring.jms.servicebus.pool.use-anonymous-producers Ett värde som anger om endast en anonym MessageProducer instans ska användas. Ställ in den på false för att skapa en MessageProducer varje gång en krävs.
spring.jms.servicebus.prefetch-policy.all Återställningsvärdet för alternativet prefetch i det här Service Bus-namnområdet. Standardvärdet är 0.
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch Antalet prefetch för varaktigt ämne. Standardvärdet är 0.
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch Antalet prefetch för köwebbläsaren. Standardvärdet är 0.
spring.jms.servicebus.prefetch-policy.queue-prefetch Antalet prefetch för kön. Standardvärdet är 0.
spring.jms.servicebus.prefetch-policy.topic-prefetch Antalet prefetch för ämnet. Standardvärdet är 0.

Not

Spring JMS allmänna konfiguration utelämnas för kort.

Mer information finns i Spring JMS-dokument.

Grundläggande användning

Ansluta till Azure Service Bus JMS med lösenordsfri

Konfigurera följande egenskaper i din application.yml-fil:

spring:
  jms:
    servicebus:
      namespace: ${AZURE_SERVICEBUS_NAMESPACE}
      pricing-tier: ${PRICING_TIER}
      passwordless-enabled: true

Viktig

Azure Service Bus JMS stöder användning av Microsoft Entra-ID för att auktorisera begäranden till Service Bus-resurser. Med Microsoft Entra-ID ser du till att du har tilldelat Azure Service Bus-dataägare rollen till det Microsoft Entra-konto som du använder för närvarande. Mer information finns i Tilldela Azure-roller med hjälp av Azure-portalen.

Ansluta till Azure Service Bus med JMS använder hanterad identitet

  1. Om du vill använda den hanterade identiteten aktiverar du den hanterade identiteten för din tjänst och tilldelar rollen Azure Service Bus Data Owner. Mer information finns i Autentisera en hanterad identitet med Microsoft Entra-ID för att få åtkomst till Azure Service Bus-resurser.

  2. Konfigurera följande egenskaper i din application.yml-fil:

    spring:
      cloud:
        azure:
          credential:
            managed-identity-enabled: true
      jms:
        servicebus:
          namespace: ${AZURE_SERVICEBUS_NAMESPACE}
          pricing-tier: ${PRICING_TIER}
          passwordless-enabled: true
    

    Viktig

    Om du använder användartilldelad hanterad identitet måste du också lägga till egenskapen spring.cloud.azure.credential.client-id med ditt användartilldelade klient-ID för hanterad identitet.

Ansluta till Azure Service Bus JMS med anslutningssträng

Lägg till följande egenskaper så är det dags att gå.

spring:
  jms:
    servicebus:
      connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
      pricing-tier: ${PRICING_TIER}

Anslutningar

Spring Cloud Azure tillhandahåller följande tre Anslutning factory-alternativ för anslutning till Azure Service Bus JMS:

  • JmsPoolConnectionFactory: Ange spring.jms.servicebus.pool.enabled=true eller lämna både pool- och cacheinställningarna oetade för att använda standardvärdet. Den här fabriken har en anslutningspool med anpassningsbara alternativ som spring.jms.servicebus.pool.max-connections. Ytterligare konfigurationsinställningar för pooler – prefix med spring.jms.servicebus.pool. – beskrivs i avsnittet Configuration. Den här konfigurationen förbättrar prestandan genom att utnyttja Azure Service Bus:s belastningsutjämningsfunktion och distribuera trafik över flera slutpunkter.

  • CachingConnectionFactory: Ställ in spring.jms.cache.enabled=true och låt spring.jms.servicebus.pool.enabled vara oetig. Den här fabriken återanvänder en enda anslutning för alla anrop till JmsTemplate, vilket minskar kostnaderna för att skapa anslutningar, vilket är idealiskt för scenarier med låg trafik. Det här läget utnyttjar dock inte Azure Service Bus:s belastningsutjämningsfunktion.

  • ServiceBusJmsConnectionFactory: Ange spring.jms.servicebus.pool.enabled=false och spring.jms.cache.enabled=false att använda ServiceBusJmsConnectionFactory direkt, utan poolning eller cachelagring. I det här läget skapar varje anrop till JmsTemplate en ny anslutning, som kan vara resursintensiv och mindre effektiv.

För optimal prestanda och belastningsfördelning rekommenderar vi att du använder JmsPoolConnectionFactory genom att ange spring.jms.servicebus.pool.enabled=true. Undvik att omsluta en JmsPoolConnectionFactory med en CachingConnectionFactory eller ServiceBusJmsConnectionFactory eftersom detta kan negera poolfördelar och kan leda till inaktiva anslutningar när de har avlägsnats från poolen.

Not

Från och med Spring Cloud Azure 5.19.0 har standard ConnectionFactory uppdaterats för att JmsPoolConnectionFactory för bättre användning av Service Bus-serverbelastningsutjämning. Om du föredrar att fortsätta använda CachingConnectionFactory för cachelagring av både Session och MessageProduceranger du spring.jms.cache.enabled till true.

Prover

Mer information finns i azure-spring-boot-samples lagringsplats på GitHub.