Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel leest u hoe u Azure Service Bus gebruikt in Java-toepassingen die zijn gebouwd met Spring Framework.
Azure biedt een asynchroon berichtenplatform met de naam Azure Service Bus (Service Bus), dat is gebaseerd op de standaard Advanced Message Queueing Protocol 1.0 (AMQP 1.0). U kunt Service Bus gebruiken in het bereik van ondersteunde Azure-platforms.
Spring Cloud Azure biedt verschillende modules voor het verzenden van berichten naar en het ontvangen van berichten van Service Bus wachtrijen en onderwerpen/abonnementen met behulp van Spring-frameworks.
U kunt de volgende modules onafhankelijk gebruiken of combineren voor verschillende gebruiksvoorbeelden:
Met Spring Cloud Azure Service Bus Starter kunt u berichten verzenden en ontvangen met de Service Bus Java SDK-clientbibliotheek met Spring Boot-functies.
Met Spring Cloud Azure Service Bus JMS Starter kunt u de JMS-API gebruiken voor het verzenden en ontvangen van berichten met Service Bus-wachtrijen en -onderwerpen/abonnementen.
Met Spring Messaging Azure Service Bus kunt u communiceren met Service Bus via de Spring Messaging-API .
Met Spring Integration Azure Service Bus kunt u Spring Integration Message Channels verbinden met Service Bus.
Met Spring Cloud Stream Binder voor Service Bus kunt u Service Bus gebruiken als berichten-middleware in Spring Cloud Stream-toepassingen.
Vereisten
- Een Azure-abonnement (u kunt een gratis abonnement maken).
- Java Development Kit (JDK) versie 8 of hoger.
- Apache Maven, versie 3.0 of hoger.
- Een Azure Service Bus en wachtrij of onderwerp/abonnement. Als u er nog geen hebt, creëert u een Service Bus-wachtrij of -onderwerp. Zie Azure Portal gebruiken voor het maken van een Service Bus-naamruimte en een wachtrij of Azure Portal gebruiken om een Service Bus-onderwerp en abonnementen voor het onderwerp te maken.
- Als u geen Spring Boot-toepassing hebt, maakt u een Maven-project met de Spring Initializr. Zorg ervoor dat u Maven Project selecteert en onder Afhankelijkheden de Spring Web-afhankelijkheid toevoegt en vervolgens Java-versie 8 of hoger selecteert.
Notitie
Als u uw account toegang wilt verlenen tot uw Service Bus-resources, wijst u in uw zojuist gemaakte Azure Service Bus-naamruimte de rollen Azure Service Bus Data Sender en Azure Service Bus Data Receiver toe aan het Microsoft Entra-account dat u momenteel gebruikt. Zie voor meer informatie Azure-rollen toewijzen met behulp van de Azure-portal.
Belangrijk
Spring Boot versie 2.5 of hoger is vereist om de stappen in deze zelfstudie uit te voeren.
Uw lokale omgeving voorbereiden
In deze handleiding hebben de configuraties en code geen verificatiebewerkingen. Voor het maken van verbinding met een Azure-service is echter verificatie vereist. Als u de verificatie wilt voltooien, moet u de Azure Identity-clientbibliotheek gebruiken. Spring Cloud Azure maakt gebruik van DefaultAzureCredential, die de Azure Identity-bibliotheek biedt om u te helpen referenties op te halen zonder codewijzigingen aan te brengen.
DefaultAzureCredential ondersteunt meerdere verificatiemethoden en bepaalt welke methode tijdens runtime moet worden gebruikt. Met deze aanpak kan uw app verschillende verificatiemethoden gebruiken in verschillende omgevingen, zoals lokale of productieomgevingen, zonder omgevingsspecifieke code te implementeren. Zie de sectie DefaultAzureCredential van Door Azure gehoste Java-toepassingen verifiëren voor meer informatie.
Als u Azure CLI, IntelliJ of andere methoden wilt gebruiken om de verificatie in lokale ontwikkelomgevingen te voltooien, raadpleegt u Azure-verificatie in Java-ontwikkelomgevingen. Als u de verificatie in Azure-hostingomgevingen wilt voltooien, raden we u aan beheerde identiteit te gebruiken. Zie Wat zijn beheerde identiteiten voor Azure-resources? voor meer informatie.
Notitie
Azure Service Bus voor JMS API biedt momenteel geen ondersteuning voor DefaultAzureCredential. Als u Spring JMS met Service Bus gebruikt, negeert u deze stap.
Spring Cloud Azure Service Bus Starter gebruiken
De Spring Cloud Azure Service Bus Starter-module importeert de Service Bus Java-clientbibliotheek met Spring Boot Framework. U kunt Spring Cloud Azure en de Azure SDK samen gebruiken in een niet-wederzijds exclusief patroon. U kunt de Service Bus Java-client-API dus blijven gebruiken in uw Spring-toepassing.
De Service Bus-afhankelijkheid toevoegen
Als u de Spring Cloud Azure Service Bus Starter-module wilt installeren, voegt u de volgende afhankelijkheden toe aan uw pom.xml-bestand :
De Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>6.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Notitie
Als u Spring Boot 3.0.x-3.4.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op5.23.0.Als u Spring Boot 2.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op4.20.0.Deze stuklijst moet worden geconfigureerd in het
<dependencyManagement>gedeelte van uw pom.xml-bestand. Dit zorgt ervoor dat alle Spring Cloud Azure-afhankelijkheden dezelfde versie gebruiken.Zie welke versie van Spring Cloud Azure moet ik gebruiken voor meer informatie over de versie die voor deze BOM wordt gebruikt.
Het Spring Cloud Azure Service Bus-artefact:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-servicebus</artifactId> </dependency>
Codeer de toepassing om berichten te verzenden en te ontvangen
In deze handleiding leert u hoe u de Service Bus Java-clients gebruikt in de context van een Spring-toepassing. Hier introduceren we twee alternatieven. De aanbevolen manier is om Automatisch configureren van Spring Boot te gebruiken en kant-en-klare clients uit de Spring-context te gebruiken. Een alternatieve manier is om zelf programmatisch clients te bouwen.
De eerste manier, waarbij automatische bedrading van de clientbonen uit de Spring IoC-container omvat, heeft de volgende voordelen in vergelijking met de tweede manier. Deze voordelen bieden u een flexibelere en efficiëntere ervaring bij het ontwikkelen met Service Bus-clients.
U kunt een externe configuratie gebruiken, zodat u met dezelfde toepassingscode in verschillende omgevingen kunt werken.
U kunt het proces van het leren van het opbouwpatroon en het registreren van deze client in de toepassingscontext delegeren aan het Spring Boot-framework. Met deze delegatie kunt u zich richten op hoe u softwareclients kunt gebruiken voor uw eigen zakelijke vereisten.
U kunt de statusindicator op een eenvoudige manier gebruiken om de status en status van uw toepassing en interne onderdelen te controleren.
In het volgende codevoorbeeld ziet u hoe u ServiceBusSenderClient en ServiceBusProcessorClient met deze twee alternatieven gebruikt.
Notitie
Azure Java SDK voor Service Bus biedt meerdere clients om te communiceren met Service Bus. De starter biedt ook automatische configuratie voor alle Service Bus-clients en clientbouwers. Hier gebruiken we alleen ServiceBusSenderClient en ServiceBusProcessorClient als voorbeelden.
Spring Boot AutoConfiguration gebruiken
Als u berichten wilt verzenden naar en ontvangen van Service Bus, configureert u de toepassing met behulp van de volgende stappen:
Configureer uw Service Bus-naamruimte en -wachtrij, zoals wordt weergegeven in het volgende voorbeeld:
spring.cloud.azure.servicebus.namespace=<your-servicebus-namespace-name> spring.cloud.azure.servicebus.entity-name=<your-servicebus-queue-name> spring.cloud.azure.servicebus.entity-type=queueAanbeveling
Hier gebruiken we Service Bus-wachtrij als voorbeeld. Als u onderwerp/abonnement wilt gebruiken, moet u de
spring.cloud.azure.servicebus.processor.subscription-nameeigenschap toevoegen en deentity-typewaarde wijzigen intopic.Maak een nieuwe
ServiceBusProcessorClientConfigurationJava-klasse, zoals wordt weergegeven in het volgende voorbeeld. Deze klasse wordt gebruikt om de bericht- en foutafhandelingsmodule vanServiceBusProcessorClientte registreren.@Configuration(proxyBeanMethods = false) public class ServiceBusProcessorClientConfiguration { @Bean ServiceBusRecordMessageListener processMessage() { return context -> { ServiceBusReceivedMessage message = context.getMessage(); System.out.printf("Processing message. Id: %s, Sequence #: %s. Contents: %s%n", message.getMessageId(), message.getSequenceNumber(), message.getBody()); }; } @Bean ServiceBusErrorHandler processError() { return context -> { System.out.printf("Error when receiving messages from namespace: '%s'. Entity: '%s'%n", context.getFullyQualifiedNamespace(), context.getEntityPath()); }; } }Injecteer de
ServiceBusSenderClientin je Spring-toepassing en roep de bijbehorende API's aan om berichten te verzenden, zoals wordt weergegeven in het volgende voorbeeld:@SpringBootApplication public class ServiceBusQueueApplication implements CommandLineRunner { private final ServiceBusSenderClient senderClient; public ServiceBusQueueApplication(ServiceBusSenderClient senderClient) { this.senderClient = senderClient; } public static void main(String[] args) { SpringApplication.run(ServiceBusQueueApplication.class, args); } @Override public void run(String... args) throws Exception { // send one message to the queue senderClient.sendMessage(new ServiceBusMessage("Hello, World!")); System.out.printf("Sent a message to the queue"); senderClient.close(); // wait the processor client to consume messages TimeUnit.SECONDS.sleep(10); } }Notitie
Standaard wordt de levenscyclus van de autowired
ServiceBusProcessorClientbean beheerd door de Spring-context. De processor wordt automatisch gestart wanneer de Spring Application Context wordt gestart en gestopt wanneer de Spring Application Context stopt. Als u deze functie wilt uitschakelen, configureert uspring.cloud.azure.servicebus.processor.auto-startup=false.Start de toepassing. U ziet logboeken die vergelijkbaar zijn met het volgende voorbeeld:
Sent a message to the queue Processing message. Id: 6f405435200047069a3caf80893a80bc, Sequence #: 1. Contents: Hello, World!
Service Bus-clients programmatisch bouwen
U kunt die clientcomponenten zelf bouwen, maar het proces is ingewikkeld. In Spring Boot-toepassingen moet u eigenschappen beheren, het opbouwpatroon leren en de client registreren bij de context van uw Spring-toepassing. In het volgende codevoorbeeld ziet u hoe u dit doet:
Maak een nieuwe
ServiceBusClientConfigurationJava-klasse, zoals wordt weergegeven in het volgende voorbeeld. Deze klasse wordt gebruikt om deServiceBusSenderClientenServiceBusProcessorClientbonen te declareren.@Configuration(proxyBeanMethods = false) public class ServiceBusClientConfiguration { private static final String SERVICE_BUS_FQDN = "<service-bus-fully-qualified-namespace>"; private static final String QUEUE_NAME = "<service-bus-queue-name>"; @Bean ServiceBusClientBuilder serviceBusClientBuilder() { return new ServiceBusClientBuilder() .fullyQualifiedNamespace(SERVICE_BUS_FQDN) .credential(new DefaultAzureCredentialBuilder().build()); } @Bean ServiceBusSenderClient serviceBusSenderClient(ServiceBusClientBuilder builder) { return builder .sender() .queueName(QUEUE_NAME) .buildClient(); } @Bean ServiceBusProcessorClient serviceBusProcessorClient(ServiceBusClientBuilder builder) { return builder.processor() .queueName(QUEUE_NAME) .processMessage(ServiceBusClientConfiguration::processMessage) .processError(ServiceBusClientConfiguration::processError) .buildProcessorClient(); } private static void processMessage(ServiceBusReceivedMessageContext context) { ServiceBusReceivedMessage message = context.getMessage(); System.out.printf("Processing message. Id: %s, Sequence #: %s. Contents: %s%n", message.getMessageId(), message.getSequenceNumber(), message.getBody()); } private static void processError(ServiceBusErrorContext context) { System.out.printf("Error when receiving messages from namespace: '%s'. Entity: '%s'%n", context.getFullyQualifiedNamespace(), context.getEntityPath()); } }Notitie
Zorg ervoor dat u de tijdelijke aanduiding vervangt door uw
<service-bus-fully-qualified-namespace>Service Bus-hostnaam in Azure Portal. Vervang de<service-bus-queue-name>tijdelijke aanduiding door uw eigen wachtrijnaam die is geconfigureerd in uw Service Bus-naamruimte.Injecteer de clientbeans in uw toepassing, zoals in het volgende voorbeeld wordt weergegeven:
@SpringBootApplication public class ServiceBusQueueApplication implements CommandLineRunner { private final ServiceBusSenderClient senderClient; private final ServiceBusProcessorClient processorClient; public ServiceBusQueueApplication(ServiceBusSenderClient senderClient, ServiceBusProcessorClient processorClient) { this.senderClient = senderClient; this.processorClient = processorClient; } public static void main(String[] args) { SpringApplication.run(ServiceBusQueueApplication.class, args); } @Override public void run(String... args) throws Exception { // send one message to the queue senderClient.sendMessage(new ServiceBusMessage("Hello, World!")); System.out.printf("Sent a message to the queue"); senderClient.close(); System.out.printf("Starting the processor"); processorClient.start(); TimeUnit.SECONDS.sleep(10); System.out.printf("Stopping and closing the processor"); processorClient.close(); } }Start de toepassing. U ziet logboeken die vergelijkbaar zijn met het volgende voorbeeld:
Sent a message to the queue Starting the processor ... Processing message. Id: 6f405435200047069a3caf80893a80bc, Sequence #: 1. Contents: Hello, World! Stopping and closing the processor
In de volgende lijst ziet u redenen waarom deze code niet flexibel of elegant is:
- De naamruimte en wachtrij-/onderwerp-/abonnementsnamen zijn in code vastgelegd.
- Wanneer u
@Valuegebruikt om configuraties uit de Spring-omgeving te verkrijgen, kunt u geen IDE-hints hebben in het application.properties-bestand. - Als u een microservicescenario hebt, moet u de code in elk project dupliceren en het is eenvoudig om fouten te maken en moeilijk consistent te zijn.
Gelukkig is het niet nodig om zelf de client beans te bouwen met Spring Cloud Azure. In plaats daarvan kunt u de bonen rechtstreeks injecteren en de configuratie-eigenschappen gebruiken waarmee u al bekend bent om Service Bus te configureren.
Spring Cloud Azure biedt ook de volgende globale configuraties voor verschillende scenario's. Zie de sectie Globale configuratie voor Azure Service SDK's van de Spring Cloud Azure-configuratie voor meer informatie.
- Proxyopties.
- Opties voor opnieuw proberen.
- Opties voor AMQP transportclient.
U kunt ook verbinding maken met verschillende Azure-clouds. Zie Verbinding maken met verschillende Azure-clouds voor meer informatie.
Spring Cloud Azure Service Bus JMS Starter gebruiken
De Spring Cloud Azure Service Bus JMS Starter-module biedt Spring JMS-integratie met Service Bus. In de volgende video wordt beschreven hoe u Spring JMS-toepassingen integreert met Azure Service Bus met behulp van JMS 2.0.
Deze handleiding laat zien hoe u Spring Cloud Azure Service Bus Starter voor JMS API gebruikt om berichten te verzenden naar en te ontvangen van Service Bus.
De Service Bus-afhankelijkheid toevoegen
Als u de Spring Cloud Azure Service Bus JMS Starter-module wilt installeren, voegt u de volgende afhankelijkheden toe aan uw pom.xml-bestand :
De Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>6.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Notitie
Als u Spring Boot 3.0.x-3.4.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op5.23.0.Als u Spring Boot 2.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op4.20.0.Deze stuklijst moet worden geconfigureerd in het
<dependencyManagement>gedeelte van uw pom.xml-bestand. Dit zorgt ervoor dat alle Spring Cloud Azure-afhankelijkheden dezelfde versie gebruiken.Zie welke versie van Spring Cloud Azure moet ik gebruiken voor meer informatie over de versie die voor deze BOM wordt gebruikt.
Het Spring Cloud Azure Service Bus JMS-artefact:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId> </dependency>
Codeer de toepassing om berichten te verzenden en te ontvangen
Configureer de verbindingsreeks en prijscategorie voor uw Service Bus, zoals wordt weergegeven in het volgende voorbeeld:
spring.jms.servicebus.connection-string=<service-bus-namespace-connection-string> spring.jms.servicebus.pricing-tier=<service-bus-pricing-tier>Maak de ontvanger van het bericht.
Spring biedt de middelen om berichten te publiceren naar een POJO (Plain Old Java Object). Definieer eerst een algemene
Userklasse waarin de naam van de gebruiker wordt opgeslagen en opgehaald, zoals wordt weergegeven in het volgende voorbeeld:public class User implements Serializable { private static final long serialVersionUID = -295422703255886286L; private String name; public User() { } public User(String name) { setName(name); } public String getName() { return name; } public void setName(String name) { this.name = name; } }Aanbeveling
Serializablewordt geïmplementeerd om de methodesendinJmsTemplatein het Spring-framework te gebruiken. Anders moet u een aangepasteMessageConverterbean definiëren om de inhoud te serialiseren naar JSON in tekstindeling. Voor meer informatie overMessageConverter, zie het officiële Spring JMS starter project.Hier kunt u een nieuwe
QueueReceiveServiceJava-klasse maken, zoals wordt weergegeven in het volgende voorbeeld. Deze klasse wordt gebruikt om een ontvanger van een bericht te definiëren.@Component public class QueueReceiveService { private static final String QUEUE_NAME = "<service-bus-queue-name>"; @JmsListener(destination = QUEUE_NAME, containerFactory = "jmsListenerContainerFactory") public void receiveMessage(User user) { System.out.printf("Received a message from %s.", user.getName()); } }Notitie
Vervang de
<service-bus-queue-name>-plaatsaanduiding door uw eigen wachtrijnaam die is geconfigureerd in uw Service Bus-naamruimte.Als u een onderwerp/abonnement gebruikt, wijzigt u de
destinationparameter in de onderwerpnaam en moet decontainerFactoryinstellen alstopicJmsListenerContainerFactory. Voeg ook desubscriptionparameter toe om de abonnementsnaam te beschrijven.Verbind een afzender en een ontvanger om berichten te verzenden en te ontvangen met Spring, zoals wordt weergegeven in het volgende voorbeeld:
@SpringBootApplication @EnableJms public class ServiceBusJmsStarterApplication { private static final String QUEUE_NAME = "<service-bus-queue-name>"; public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(ServiceBusJMSQueueApplication.class, args); JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); // Send a message with a POJO - the template reuse the message converter System.out.println("Sending a user message."); jmsTemplate.convertAndSend(QUEUE_NAME, new User("Tom")); } }Notitie
Vervang de
<service-bus-queue-name>-plaatsaanduiding door uw eigen wachtrijnaam die is geconfigureerd in uw Service Bus-naamruimte.Aanbeveling
Zorg ervoor dat u de
@EnableIntegrationaantekening toevoegt, waardoor de detectie van methoden met de@JmsListeneraantekening wordt geactiveerd, en de container voor de berichtlistener achter de schermen wordt gemaakt.Start de toepassing. U ziet logboeken die vergelijkbaar zijn met het volgende voorbeeld:
Sending a user message. Received a message from Tom.
Overige informatie
Zie JMS-API gebruiken met Service Bus en AMQP 1.0 voor meer informatie.
Spring Messaging Azure Service Bus gebruiken
De Spring Messaging Azure Service Bus-module biedt ondersteuning voor Spring Messaging-framework met Service Bus.
Als u Spring Messaging Azure Service Bus gebruikt, kunt u de volgende functies gebruiken:
-
ServiceBusTemplate: berichten asynchroon en synchroon verzenden naar Service Bus-wachtrijen en onderwerpen. -
@ServiceBusListener: een methode markeren als de ontvanger van een Service Bus-berichtlistener op de bestemming.
Deze handleiding laat zien hoe u Spring Messaging Azure Service Bus gebruikt om berichten te verzenden naar en te ontvangen van Service Bus.
De Service Bus-afhankelijkheid toevoegen
Als u de Spring Messaging Azure Service Bus-module wilt installeren, voegt u de volgende afhankelijkheden toe aan uw pom.xml-bestand :
De Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>6.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Notitie
Als u Spring Boot 3.0.x-3.4.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op5.23.0.Als u Spring Boot 2.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op4.20.0.Deze stuklijst moet worden geconfigureerd in het
<dependencyManagement>gedeelte van uw pom.xml-bestand. Dit zorgt ervoor dat alle Spring Cloud Azure-afhankelijkheden dezelfde versie gebruiken.Zie welke versie van Spring Cloud Azure moet ik gebruiken voor meer informatie over de versie die voor deze BOM wordt gebruikt.
De Spring Messaging Service Bus- en Spring Cloud Azure-starterartefacten:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-messaging-azure-servicebus</artifactId> </dependency>
Codeer de toepassing om berichten te verzenden en te ontvangen
Configureer de naamruimte en het wachtrijtype voor uw Service Bus, zoals wordt weergegeven in het volgende voorbeeld:
spring.cloud.azure.servicebus.namespace=<service-bus-namespace-name> spring.cloud.azure.servicebus.entity-type=queueNotitie
Als u een onderwerp/abonnement gebruikt, wijzigt u de
spring.cloud.azure.servicebus.entity-typewaarde intopic.Maak een nieuwe
ConsumerServiceJava-klasse, zoals wordt weergegeven in het volgende voorbeeld. Deze klasse wordt gebruikt om een ontvanger van een bericht te definiëren.@Service public class ConsumerService { private static final String QUEUE_NAME = "<service-bus-queue-name>"; @ServiceBusListener(destination = QUEUE_NAME) public void handleMessageFromServiceBus(String message) { System.out.printf("Consume message: %s%n", message); } }Notitie
Als u een onderwerp/abonnement gebruikt, wijzigt u de aantekeningsparameter als
destinationonderwerpnaam en voegt u de parameter toe om degroupabonnementsnaam te beschrijven.Verbind een afzender en een ontvanger om berichten te verzenden en te ontvangen met Spring, zoals wordt weergegeven in het volgende voorbeeld:
@SpringBootApplication @EnableAzureMessaging public class Application { private static final String QUEUE_NAME = "<service-bus-queue-name>"; public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class); ServiceBusTemplate serviceBusTemplate = applicationContext.getBean(ServiceBusTemplate.class); System.out.println("Sending a message to the queue."); serviceBusTemplate.sendAsync(QUEUE_NAME, MessageBuilder.withPayload("Hello world").build()).subscribe(); } }Aanbeveling
Zorg ervoor dat u de
@EnableAzureMessagingaantekening toevoegt, waardoor de detectie van methoden met de@ServiceBusListeneraantekening wordt geactiveerd, en de container voor de berichtlistener achter de schermen wordt gemaakt.Start de toepassing. U ziet logboeken die vergelijkbaar zijn met het volgende voorbeeld:
Sending a message to the queue. Consume message: Hello world.
Spring Integration Azure Service Bus gebruiken
De Spring Integration Azure Service Bus-module biedt ondersteuning voor het Spring Integration-framework met Service Bus.
Als uw Spring-toepassing Spring Integration-berichtkanalen gebruikt, kunt u berichten routeren tussen uw berichtkanalen en Service Bus met behulp van kanaaladapters.
Een inkomende kanaaladapter stuurt berichten van een Service Bus-wachtrij of -abonnement door naar een berichtkanaal. Een uitgaande kanaaladapter publiceert berichten van een berichtkanaal naar een wachtrij en een onderwerp in de Service Bus.
Deze handleiding laat zien hoe u Spring Integration Azure Service Bus gebruikt om berichten te verzenden naar en te ontvangen van Service Bus.
De Service Bus-afhankelijkheid toevoegen
Als u de Spring Cloud Azure Service Bus Integration Starter-module wilt installeren, voegt u de volgende afhankelijkheden toe aan uw pom.xml-bestand :
De Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>6.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Notitie
Als u Spring Boot 3.0.x-3.4.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op5.23.0.Als u Spring Boot 2.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op4.20.0.Deze stuklijst moet worden geconfigureerd in het
<dependencyManagement>gedeelte van uw pom.xml-bestand. Dit zorgt ervoor dat alle Spring Cloud Azure-afhankelijkheden dezelfde versie gebruiken.Zie welke versie van Spring Cloud Azure moet ik gebruiken voor meer informatie over de versie die voor deze BOM wordt gebruikt.
Het Spring Cloud Azure Service Bus-integratieartefact:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-integration-servicebus</artifactId> </dependency>
Codeer de toepassing om berichten te verzenden en te ontvangen
Configureer de naamruimte van uw Service Bus, zoals wordt weergegeven in het volgende voorbeeld:
spring.cloud.azure.servicebus.namespace=<your-servicebus-namespace-name>Maak een nieuwe
QueueReceiveConfigurationJava-klasse, zoals wordt weergegeven in het volgende voorbeeld. Deze klasse wordt gebruikt om een ontvanger van een bericht te definiëren.@Configuration public class QueueReceiveConfiguration { private static final String INPUT_CHANNEL = "queue.input"; private static final String QUEUE_NAME = "<your-servicebus-queue-name>"; private static final String SERVICE_BUS_MESSAGE_LISTENER_CONTAINER = "queue-listener-container"; /** * This message receiver binding with {@link ServiceBusInboundChannelAdapter} * via {@link MessageChannel} has name {@value INPUT_CHANNEL} */ @ServiceActivator(inputChannel = INPUT_CHANNEL) public void messageReceiver(byte[] payload) { String message = new String(payload); System.out.printf("New message received: '%s'%n", message); } @Bean(SERVICE_BUS_MESSAGE_LISTENER_CONTAINER) public ServiceBusMessageListenerContainer messageListenerContainer(ServiceBusProcessorFactory processorFactory) { ServiceBusContainerProperties containerProperties = new ServiceBusContainerProperties(); containerProperties.setEntityName(QUEUE_NAME); return new ServiceBusMessageListenerContainer(processorFactory, containerProperties); } @Bean public ServiceBusInboundChannelAdapter queueMessageChannelAdapter( @Qualifier(INPUT_CHANNEL) MessageChannel inputChannel, @Qualifier(SERVICE_BUS_MESSAGE_LISTENER_CONTAINER) ServiceBusMessageListenerContainer listenerContainer) { ServiceBusInboundChannelAdapter adapter = new ServiceBusInboundChannelAdapter(listenerContainer); adapter.setOutputChannel(inputChannel); return adapter; } @Bean(name = INPUT_CHANNEL) public MessageChannel input() { return new DirectChannel(); } }Maak een nieuwe
QueueSendConfigurationJava-klasse, zoals wordt weergegeven in het volgende voorbeeld. Deze klasse wordt gebruikt om een afzender van een bericht te definiëren.@Configuration public class QueueSendConfiguration { private static final String OUTPUT_CHANNEL = "queue.output"; private static final String QUEUE_NAME = "<your-servicebus-queue-name>"; @Bean @ServiceActivator(inputChannel = OUTPUT_CHANNEL) public MessageHandler queueMessageSender(ServiceBusTemplate serviceBusTemplate) { serviceBusTemplate.setDefaultEntityType(ServiceBusEntityType.QUEUE); DefaultMessageHandler handler = new DefaultMessageHandler(QUEUE_NAME, serviceBusTemplate); handler.setSendCallback(new ListenableFutureCallback<Void>() { @Override public void onSuccess(Void result) { System.out.println("Message was sent successfully."); } @Override public void onFailure(Throwable ex) { System.out.println("There was an error sending the message."); } }); return handler; } /** * Message gateway binding with {@link MessageHandler} * via {@link MessageChannel} has name {@value OUTPUT_CHANNEL} */ @MessagingGateway(defaultRequestChannel = OUTPUT_CHANNEL) public interface QueueOutboundGateway { void send(String text); } }Verbind een afzender en een ontvanger om berichten te verzenden en te ontvangen met Spring, zoals wordt weergegeven in het volgende voorbeeld:
@SpringBootApplication @EnableIntegration @Configuration(proxyBeanMethods = false) public class ServiceBusIntegrationApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(ServiceBusIntegrationApplication.class, args); QueueSendConfiguration.QueueOutboundGateway outboundGateway = applicationContext.getBean(QueueSendConfiguration.QueueOutboundGateway.class); System.out.println("Sending a message to the queue"); outboundGateway.send("Hello World"); } }Aanbeveling
Zorg ervoor dat u de
@EnableIntegrationaantekening toevoegt, waardoor de Spring Integration-infrastructuur mogelijk is.Start de toepassing. U ziet logboeken die vergelijkbaar zijn met het volgende voorbeeld:
Message was sent successfully. New message received: 'Hello World'
Spring Cloud Stream Service Bus Binder gebruiken
Als u de Service Bus-API wilt aanroepen in een Spring Cloud Stream-toepassing , gebruikt u de Module Spring Cloud Azure Service Bus Stream Binder.
Deze handleiding laat zien hoe u Spring Cloud Stream Service Bus Binder gebruikt om berichten te verzenden naar en te ontvangen van Service Bus.
De Service Bus-afhankelijkheid toevoegen
Als u de Spring Cloud Azure Service Bus Stream Binder-module wilt installeren, voegt u de volgende afhankelijkheden toe aan uw pom.xml-bestand :
De Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>6.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Notitie
Als u Spring Boot 3.0.x-3.4.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op5.23.0.Als u Spring Boot 2.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op4.20.0.Deze stuklijst moet worden geconfigureerd in het
<dependencyManagement>gedeelte van uw pom.xml-bestand. Dit zorgt ervoor dat alle Spring Cloud Azure-afhankelijkheden dezelfde versie gebruiken.Zie welke versie van Spring Cloud Azure moet ik gebruiken voor meer informatie over de versie die voor deze BOM wordt gebruikt.
Het Spring Cloud Azure Service Bus-integratieartefact:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId> </dependency>
Codeer de toepassing om berichten te verzenden en te ontvangen
Configureer de naamruimte van uw Service Bus, zoals wordt weergegeven in het volgende voorbeeld:
spring.cloud.azure.servicebus.namespace=<service-bus-namespace-name>Maak de ontvanger van het bericht.
Als u uw toepassing als gebeurtenisontvanger wilt gebruiken, configureert u de invoerbinding door de volgende informatie op te geven:
Declareer een
Consumerbean die berichtafhandelingslogica definieert. De volgendeConsumerbean heeft bijvoorbeeld de naamconsume:@Bean public Consumer<Message<String>> consume() { return message -> { System.out.printf("New message received: '%s'.%n", message.getPayload()); }; }Voeg de configuratie toe om de
queue-naam op te geven voor gebruik door de tijdelijke aanduiding<service-bus-queue-name>te vervangen, zoals in het volgende voorbeeld wordt weergegeven.# name for the `Consumer` bean spring.cloud.function.definition=consume spring.cloud.stream.bindings.consume-in-0.destination=<service-bus-queue-name>Notitie
Als u een Service Bus-abonnement wilt gebruiken, moet u de bindingseigenschappen
consume-in-0wijzigen, zoals wordt weergegeven in het volgende voorbeeld:spring.cloud.stream.bindings.consume-in-0.destination=<service-bus-topic-name> spring.cloud.stream.bindings.consume-in-0.group=<service-bus-subscription-name>
Maak de afzender van het bericht.
Als u uw toepassing wilt gebruiken als gebeurtenisbron, configureert u de uitvoerbindinger door de volgende informatie op te geven:
Definieer een
Supplierbean die definieert waar berichten vandaan komen in uw toepassing.@Bean return () -> { System.out.println("Sending a message."); return MessageBuilder.withPayload("Hello world").build(); }; }Voeg de configuratie toe om de
queuenaam voor het verzenden op te geven door de<your-servicebus-queue-name>tijdelijke aanduiding in het volgende voorbeeld te vervangen:# "consume" is added from the previous step spring.cloud.function.definition=consume;supply spring.cloud.stream.bindings.supply-out-0.destination=<your-servicebus-queue-name> spring.cloud.stream.servicebus.bindings.supply-out-0.producer.entity-type=queueNotitie
Als u naar een Service Bus-onderwerp wilt verzenden, moet u
entity-typewijzigen naartopic.
Start de toepassing. U ziet logboeken die vergelijkbaar zijn met het volgende voorbeeld:
Sending a message. New message received: 'Hello world'.
Implementeren in Azure Spring Apps
Nu de Spring Boot-toepassing lokaal wordt uitgevoerd, is het tijd om deze naar productie te verplaatsen. Met Azure Spring Apps kunt u Eenvoudig Spring Boot-toepassingen implementeren in Azure zonder codewijzigingen. De service beheert de infrastructuur van Spring-toepassingen, zodat ontwikkelaars zich kunnen richten op hun code. Azure Spring Apps biedt levenscyclusbeheer met uitgebreide bewaking en diagnose, configuratiebeheer, servicedetectie, CI/CD-integratie, blauwgroene implementaties en meer. Zie Uw eerste toepassing implementeren in Azure Spring Apps om uw toepassing te implementeren in Azure Spring Apps.
Volgende stappen
Zie ook
Zie Wat is Spring Cloud Azure voor meer informatie over meer Spring Boot Starters die beschikbaar zijn voor Microsoft Azure ?